今天在做一个接口的性能测试的时候发现以下情况:
查看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: