共计 1281 个字符,预计需要花费 4 分钟才能阅读完成。
本文旨在简明扼要阐明各回收器调优参数,如有疏漏欢送斧正。
1、JDK 版本
以下所有优化全副基于 JDK8 版本,强烈建议低版本升级到 JDK8,并尽可能应用 update_191 当前版本。
2、如何抉择垃圾回收器
响应优先利用:面向 C 端对响应工夫敏感的利用,堆内存 8G 以上倡议抉择 G1,堆内存较小或低版本 JDK 抉择 CMS;
吞吐量优先利用:对响应工夫不敏感,以高吞吐量为指标的利用(如 MQ、Worker),倡议抉择 ParallelGC;
3、各回收器优化参数
1)基本参数配置(所有利用、所有回收器都须要):
-Xmx(个别为容器内存的 50%)
-Xms(与 Xmx 统一)
-XX:MetaspaceSize(通常 256M~512M)
-XX:ParallelGCThreads= 容器核数
-XX:CICompilerCount= 容器核数(必须大于等于 2)
2)ParallelGC
除以上参数外,个别不须要额定调优(JDK8 默认回收器)
3)CMS
-XX:+UseConcMarkSweepGC
-Xmn(个别为堆内存的三分之一),尤其是配置了 ParallelGCThreads 后必须配置此参数
-XX:ConcGCThreads=n(默认为 ParallelGCThreads/4,可视状况调整至 ParallelGCThreads/2)
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70(推荐值)
4)G1
-XX:+UseG1GC
-XX:ConcGCThreads=n(默认为 ParallelGCThreads/4,可视状况调整至 ParallelGCThreads/2)
-XX:G1HeapRegionSize=8m(若堆内存在 8G 以内且有较多大对象举荐设置此值)
* 留神不要设置 -Xmn 和 XX:NewRatio
5)其余调优参数
-XX:+ParallelRefProcEnabled 如果 GC 时 Reference 解决工夫较长,例如大量应用 WeakReference 对象,能够通过此参数开启并行处理
4、开启 GC 日志
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/export/Logs/gc.log
5、如何判断 GC 是否失常
1)GC 是否频繁:YoungGC 频率个别几十秒钟一次,FullGC 个别每天几次,留神 G1 回收器不应该呈现 FullGC;
2)GC 耗时:耗时次要取决于堆内存大小及垃圾对象数量。YoungGC 工夫通常应在几十毫秒,FullGC 通常在几百毫秒;
3)每次 GC 内存是否降落:利用刚启动时,每次 YoungGC 内存应该回收到较低水位,随着时间推移老年代逐渐增多,内存水位会逐渐上涨,直到 FullGC/MixedGC(G1),内存会再次回到较低水位,否则可能存在内存透露;
4)如果应用 ParallelGC,堆内存耗尽才会触发 FullGC,所以不必配置堆内存使用率告警,但需关注 GC 频率;
5)泰山上能够巡检局部 JVM 配置。
作者:京东批发 王利辉
起源:京东云开发者社区