jvm调优初步实践小结

初步接触jvm的调优,不揣浅陋,试着整理下今天的调优工作:

测试软件环境

eclipse3.7,tomcat6,visualVM1.3.7,压力测试工具loaderunner11

问题发现

用loaderunner11进行web项目的压力测试,然后通过visualVM1.3.7监控相应进程的jvm。web项目启动时没有带任何额外的jvm参数,

从visualVM的GC视窗看以看出:

1.full gc操作过于频繁了,耗费太多时间,导致了访问延迟,卡顿现象;

2.各个内存区域的大小会自动扩增,消耗了cpu资源而且因为内存区的初始值小增加了垃圾收集的次数

分析

full gc过于频繁的问题是调优的主要目标,针对这个问题,要找出哪些因素会导致full gc的执行。

1.年轻代空间不足

2.per Gen(永久代)空间满

3.CMS GC时出现promotion failed和concurrent mode failure

4.统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间等

--参考自 http://book.51cto.com/art/201011/235592.htm

因此,

1.用-XX:NewRatio=3 来合理地增大年轻代的空间,以免过多的对象被移入老年代;

2.用参数-XX:MaxPermSize=512m来设定永久代的初始值(配合-Xms256m -Xmx512m,将内存的区域划定,避免了无谓的自动扩增)和最大值 ,这些参数的值应根据具体的内存环境来定,per Gen的空间足够大使得触发full gc的频率减少了许多

此外,还可根据具体的环境决定是否要启用cms垃圾回收器来回收老年代,使用并发收集器来收集内存等等。

果然加上了参数:-Xms256m -Xmx512m -XX:MaxPermSize=512m -XX:NewRatio=3 后full gc的执行频率少了许多



你可能感兴趣的:(性能调优)