1.问题现象: 在业务高峰期会出现应用响应很慢,并且有OOM(OutOfMemory)问题。
2.问题分析: weblogic响应慢问题,在分析threaddump后发现,线程大多数处于空闲状态,活动线程数量很少,没有出现死锁或者同步锁。
从GC日记和服务器的CPU的idle的活动情况来看,发现cup的使用率很高,99%以上,GC中有大量的fullGC活动情况,频繁的fullGC会影响weblogic server的响应速度,因为fullGC很消耗时间和cpu资源。
首先分析GC的两种类型和作用:GC,FULLGC
1、对象优先在Eden分配,这里大部分对象具有朝生夕灭的特征,Minor GC主要清理该处
2、大对象(占内存大)、老对象(使用频繁) 3、Survivor无法容纳的对象,将进入老年代,Full GC主要清理该处
3.解决办法: 1、将转移到老年代的对象数量降到最少
2、减少FullGC的执行时间
那么如何减少Full GC执行时间呢?
Full GC的执行时间比Minor GC要长很多。因此,如果Full GC花费了太多的时间(超过1秒),一些连接的部分可能会发生超时错误。如果你试图通过减少年老代空间来减少Full GC的执行时间,可能会导致OutOfMemoryError 或者 Full GC执行的次数会增加。因此,你需要将老年代空间设定为一个“合适”的值。
首先,由于程序中频繁的创建大量的对象,为了减少full gc的活动次数和活动时间,可以把JVM的yong generations和old generations的比例做适当的调整。具体调整参数:-XX:NewRatio=n,适当扩大yong generation的比例,服务器的默认值是8.意思就是
yong generation:old generation=1:8。
其次,设置GC打印信息,为了观察调整后的GC详细的活动情况。
参数:
-verbose:gc -Xloggc:gclog.log。