论坛首页 厂商论坛版

咨询weblogic下的java.lang.outofmemory error

浏览 653 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-03-11 关键字: weblogic
我们的项目已经上线了,采用的技术框架是JSF+Spring+Hibernate,上线之前用LoadRunner做压力测试,没有发现有什么性能问题。
系统的规模大概是10000人的在线人数,涉及到的主表共有100多个字段。
硬件环境是一台HP的PC Server,2CPU,4G内存,
软件环境是windows 2003Server,web服务器是Weblogic9.2,堆大小设置是1024M ,jdk用的是bea的jrockit R26.0,没有做cluster。
在上线测试期间,平均的在线人数在100人左右,服务器持续运行了2个星期,没有出现任何问题。
正式进入生产环境之后,在线人数维持在1000人-10000人之间,这时候发现问题了,在生产环境的压力之下,Weblogic几乎每4-5个小时就会报出java.lang.outofmemory error,我们找过了可能会产生此类错误的代码,包括数据库连接、hibernate等,没能定位问题。
现在非常着急,因为是已经上线的系统,客户非常着急每天都在催,我们也非常着急,但始终没能找到问题。我总结的潜在的原因有两个:
1. JSF的Session bean,我们配置的managed bean几乎都是session scope的,而这些bean很多都是存着大量表现层数据的,这些bean如果不能被GC及时回收,最终就会造成outofmemory error
2. Weblogic的问题,具体是什么问题就不知道了,也不认识weblogic方面的高手。....:)
请大家帮忙提一下解决方案了,谢谢:)
   
时间:2008-03-11
建议你少往session里堆东西
session不timeout或者不被invalidate,这些对象是无法被回收的
不要拿http session当cache用
   
0 请登录后投票
时间:2008-04-02
从现象上看是内存泄露引起的,你需要监测一下系统的内存使用历史情况,看是不是随着时间在增长,还是运行某个节点的时候才忽然增长.
如果是随时间而增长,那么需要考虑程序中没有释放的内存了.
奇怪的是,你选用的架构下,使用weblogic有多大意义呢?
能够给你的系统提供那些帮助呢?
看看内存是不是被session吃掉了,计算一下每个用户要消耗多少内存资源.
   
0 请登录后投票
时间:2008-04-10
在线人数1000 - 10000,那一般并发请求有多少呢?如果平均每个用户30秒一个请求,每个请求平均处理1秒钟,则理论平均并发30 - 300。峰值则至少要到100 - 1000?
对于一般的应用程序来说,单个JVM我觉得很难达支持这个并发量!

建议做一个cluster,即使是同一台机器,启动多个instance处理能力会更高。除非有特殊的大内存的处理,一般256M的堆设置比较合适,大一点也只要512,多了性能并不好。

2CPU的话,一般4-6个JVM比较合适,而且还能启动一个Apache或者lightHttpd做前端,可以保持很好的性能和稳定性。
   
0 请登录后投票
时间:2008-06-23
检查一下SQL?
   
0 请登录后投票
时间:2008-09-03
jprofile监控一下就好了
   
0 请登录后投票
论坛首页 厂商论坛版

跳转论坛:
JavaEye推荐