AppCode JVM 参数优化
昨晚花了 2 个小时熟悉了一下 AppCode, 和 IDEA 系列给人的感觉一样:很卡很强大。就打算优化一下 JVM 的设置,AppCode 的 JVM 参数配置文件在 /Applications/AppCode EAP.app/bin/idea.vmoptions
使用默认的参数,用一段 AppCode,观察了一下 GC 的情况:
➜ ~ jstat -gcutil 50991 1s
S0 S1 E O P YGC YGCT FGC FGCT GCT
79.31 0.00 37.61 88.64 60.84 6654 57.031 137 3.017 60.048
79.31 0.00 37.63 88.64 60.84 6654 57.031 137 3.017 60.048
79.31 0.00 37.65 88.64 60.84 6654 57.031 137 3.017 60.048
79.31 0.00 37.66 88.64 60.84 6654 57.031 137 3.017 60.048
79.31 0.00 37.67 88.64 60.84 6654 57.031 137 3.017 60.048
79.31 0.00 37.69 88.64 60.84 6654 57.031 137 3.017 60.048
79.31 0.00 37.70 88.64 60.84 6654 57.031 137 3.017 60.048
发现 YoungGC 有 6654 次,耗时 57s,FullGC 有 137 次,3s 多,花在 GC 上的总时间有 60s,按每次卡一次 1s 来算,单是 GC 就让人感觉到 60 次明显卡顿,确实让人受不了。
查了一下默认的参数,内存设置的太保守,所以我改成了下面这个方案:
我的机子是 8G 内存,给 AppCode 分配 1500M,如果你的是 4G 内存,建议把 -Xms1500m
和 -Xmx1500m
都调成 1000m,-XX:NewSize=600m
和 -XX:MaxNewSize=600m
改为 400M。修改之前把 idea.vmoptions
文件备份一下,以防万一。
-Xms1500m
-Xmx1500m
-XX:NewSize=600m
-XX:MaxNewSize=600m
-XX:SurvivorRatio=8
-XX:PermSize=200m
-XX:MaxPermSize=400m
-XX:ReservedCodeCacheSize=96m
-XX:+UseCompressedOops
-XX:+DisableExplicitGC
使用后:
➜ jstat -gcutil 58835 1s
S0 S1 E O P YGC YGCT FGC FGCT GCT
61.70 0.00 48.84 15.60 52.92 12 1.066 0 0.000 1.066
61.70 0.00 48.84 15.60 52.92 12 1.066 0 0.000 1.066
61.70 0.00 48.84 15.60 52.92 12 1.066 0 0.000 1.066
61.70 0.00 48.84 15.60 52.92 12 1.066 0 0.000 1.066
61.70 0.00 48.84 15.60 52.92 12 1.066 0 0.000 1.066
61.70 0.00 48.84 15.60 52.92 12 1.066 0 0.000 1.066
YGC 降低到了 12 次,GC 时间是 1s,没有 FullGC, 没有感觉到卡顿的情况。
这个主要是从内存分配方面优化,GC 算法上也可以优化,但是需要多测试每种 GC 算法的情况,也可能会因人而异,等我慢慢找到一个不错的方案再分享出来。
至于上面参数的意思,可以查看我在 iteye 上以前的一篇 Blog:10s 启动 MyEclipse/Eclipse 的 JVM 参数(含 Mac 下)