写点什么

浅析 JVM GC 配置指南 | 京东云技术团队

  • 2023-07-12
    北京
  • 本文字数:971 字

    阅读完需:约 3 分钟

浅析JVM GC配置指南 | 京东云技术团队

本文旨在简明扼要说明各回收器调优参数,如有疏漏欢迎指正。

#### 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 配置。

> 作者:京东零售 王利辉

>

> 来源:京东云开发者社区

发布于: 刚刚阅读数: 5
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
浅析JVM GC配置指南 | 京东云技术团队_JVM_京东科技开发者_InfoQ写作社区