今天在做一个接口的性能测试的时候发现以下情况:

查看visualVM的图形如下所示:

Full GC非常平凡,Minor GC次数比较少。立马查看JVM配置如下:

从配置中可以看出Youngh 区分配空间太大,导致old去内存溢出。修改JVM参数如下所示:

JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx1024m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:SurvivorRatio=22 -XX:MaxTenuringThreshold=6 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/home/member/ma-online/logs/gc.log"

减少Youngh区内存大小为256,增加两个survivor区,并且增加垃圾最大年龄, Youngh区进行ParNewGC策略,old区进行cms策略。配置完成后进行压力测试如下所示:

明显FGC的次数降低。

VisualVM的图形如下所示:

效率大增。

 

JVM参数配置可以参考blog:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html