JVM优化经验

应该分为 

1.系统层面: 合理的 openfile数 用 -server模式 打开limit限制

2.代码层面的,尽量用局部变量,用小而美的对象

3. 用  jstat -gcutil 获取 Minor GC,Full GC的平均值  如果GC执行时间满足下列所有条件,就没有必要进行GC优化了

Minor GC执行非常迅速(50ms以内)

Minor GC没有频繁执行(大约10s执行一次)

Full GC执行非常迅速(1s以内)

Full GC没有频繁执行(大约10min执行一次)


查看JVM所有参数:

jinfo -flags pid


jstat -gcutil pid 200 20

这个命令意思就是每隔200ms输出pid 的gc情况,一共输出20次



从应用程序启动到采样时发生 Young GC 的次数)和YGCT(从应用程序启动到采样时 Young GC 所用的时间(秒)),计算YGCT/YGC会得出,平均每次新生代的GC耗时50ms,这是一个很小的数字,通过这个结果可以看出,我们大可不必关注新生代GC对GC性能的影响。

现在来看一下FGC( 从应用程序启动到采样时发生 Full GC 的次数)和FGCT(从应用程序启动到采样时 Full GC 所用的时间(秒)),计算FGCT/FGC会得出,平均每次老年代的GC耗时19.68s。有可能是执行了三次Full GC,每次耗时19.68s,也有可能是有两次只花了1s,另一次花了58s。不管是哪一种情况,GC优化都是很有必要的。



4.  从配置  垃圾回收器,最大堆 最小堆, 新生代和老年代的比例  分别压测周内 运行的 情况来 选择合适的 条件


Case 1: -XX:+UseParallelGC -Xms1536m -Xmx1536m -XX:NewRatio=2

Case 2: -XX:+UseParallelGC -Xms1536m -Xmx1536m -XX:NewRatio=3

Case 3: -XX:+UseParallelGC -Xms1g -Xmx1g -XX:NewRatio=3

Case 4: -XX:+UseParallelOldGC -Xms1536m -Xmx1536m -XX:NewRatio=2

Case 5: -XX:+UseParallelOldGC -Xms1536m -Xmx1536m -XX:NewRatio=3

Case 6: -XX:+UseParallelOldGC -Xms1g -Xmx1g -XX:NewRatio=3


准备6台机器, 压测2-3天,看下那种表现好,就用那种 配置 


JVM优化经验_第1张图片

你可能感兴趣的:(JVM优化经验)