1.环境Weblogic版本:9.2.0 操作系统版本:Linux 32bits
Jdk版本:sun java version "1.5.0_04"
数据库连接字符串:jdbc:oracle:thin:@10.237.66.2:1521:orcl
2.集群结构
下图所示,在一个weblogic集群中共有5个被管节点,分别分布在5台机器上。
3.问题现象
在业务高峰期会出现应用响应很慢,并且有OOM(OutOfMemory)问题
4.问题分析
4.1 日志分析
4.1.1 问题
">Threaddump分析:weblogic响应慢问题,在分析threaddump后发现,线程大多数处于空闲状态,活动线程数量很少,没有出现死锁或者是同步锁。如图所示
">GC日志分析:从GC日志和服务器的CPU的idle的活动情况来看,发现cpu的使用率很高,99%以上。GC中有大量的fullGC活动情况。平凡的full GC肯定是会影响weblogic server的响应速度。因为full gc是很消耗时间和cpu资源。如下图:
"> 日志分析:在日中发现大量的stuck状态的线程报错信息日志:
引起这种问题的原因是由于在执行sql语句时,查询出了大量的数据,引起的网络上的异常。解决方法可以从优化sql语句上入手。
4.1.2 解决方案
在经过了分析后,可以从以下方面入手解决,首先,由于程序中平凡的创建大量的对象为了减少full gc的活动次数和活动时间,可以把jvm的young generations和old generations的比例作适当的调整。具体调整参数:–XX:NewRatio=n,适当扩大young generation的比例。服务器上的默认值是8.意思就是young generation:old generation=1:8。其次,设置GC打印信息,为了观察调整后的GC详细的活动情况。参数:-verbose:gc -Xloggc:gclog.log。
4.1.3 解决方案
对于OOM问题,在观察了weblogic server日志中weblogic输出的<Health>后发现,OOM并不是heap区的OOM问题,由于现场也没有更加详细的GC的日志,所以无法准确判断引起日志中报出OOM的问题原因。建议,继续对系统进行监控