最近做了一个使用Ofbiz9.04作为电子商务网站引擎的项目,需要吧Ofbiz部署到Jboss5.1.0里。
到了性能和压力测试阶段,对Ofbiz的Product List页面进行了一下优化,能用缓存的地方都用了缓存,数据库访问从每个请求十几次降到一次不到。响应时间自然是快了,随之而来的却是OutOfMemoryError。其实报错的是heap根本没用完。后来看Jboss的jmx-console发现报错时活动线程达到35000+,所以申请不到新线程了。研究Thread Dump发现多出来的线程都是Ofbiz里面的GenericXaResource。这厮在等Transaction Timeout。之前用Ofbiz自带的应用服务器跑压力测试时Ofbiz表现很稳,研究一下区别,发现用的TransactionManager不一样了,transaction timeout的配置也不一样了。原来时60秒,在Jboss里是300秒。于是去修改Jboss的配置,试试看60秒,果然问题迎刃而解。压力最大时活跃线程数稳定在9000+。
希望本文对遇到相似问题的朋友有帮助。