最近发现在业务高峰期发现weblogic服务器响应很忙,并伴随有OOM问题。
系统环境如下:
Weblogic版本:9.2.0
操作系统版本:linux32bits
JDK版本:sun java version”1.5.0_04”
数据库连接字符串:jdbc:oracle:thin:@59.188.0.6:1521:orcl
集群结构:在一个weblogic集群中共有5个被管节点,分别在五台机器上。
在分析threaddump后发现,线程大多数处于空闲状态,活动的线程量很少,没有出现死锁或者线程锁。如图:
从GC日志和服务器的CPU的的idle的活动情况来看发现cpu的使用率很高,gc中有大量的full GC活动情况,频繁的full GC活动肯定会影响weblogic server的响应速度。full GC很消耗时间很cpu资源。而且在线程中发现大量的stuck状态的线程报错信息日志(如图):
出现上述情况的原因是在执行sql语句的时候,查询了大量的数据,导致网络异常,解决办法可以从优化sql入手。
解决办法:
①、由于程序中出现频繁的创建大量的对象,为了减少full gc的活动时间和活动的次数可以把jvm的young generations和old generations的比例做适当的调整。
具体调整参数:-XX:NewRation=n,适当扩大young generations的比例。 服务器上面的默认值是8,意思就是young generation:old generations=1:8
②、设置GC打印信息,为了观察调整后的GC详细活动情况。参数:-verbose:gc -Xloggc:gclog.log