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

京东云开发者
• 阅读 330

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

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

作者:京东零售 王利辉

来源:京东云开发者社区

点赞
收藏
评论区
推荐文章
灯灯灯灯 灯灯灯灯
3年前
阿里面试被问到【垃圾回收器】,不会怎么办??
垃圾回收器GC分类与性能指标垃圾回收器概述1.垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。2.由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。3.从不同角度分析垃圾收集器,可以将GC分为不同的类型。Java不同版本新特性1.语法层面:Lambda表达式、switch、
Wesley13 Wesley13
3年前
java中的GC和内存泄漏
java中的GC1.GC是什么?为什么要有GC? GC是垃圾回收的意思。是指JVM清理不再使用的对象释放内存。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存.2\.需要GC的内存区域垃圾回收区域:主要针对无用堆对象回
Wesley13 Wesley13
3年前
JAVA工程师成神道路
一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优1.1.3.
Wesley13 Wesley13
3年前
Java工程师成神之路~
一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优1.1.3.
Wesley13 Wesley13
3年前
Java工程师成神之路
一、基础篇1.1JVM1.1.1.Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id133http://ifeve.com/jmmfaq/1.1.2.了解JVM各种参数及调优
Wesley13 Wesley13
3年前
CMS垃圾回收过程
1.总体介绍:CMS(ConcurrentMarkSweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上\XX:UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。2.CMS
Stella981 Stella981
3年前
JVM系列【6】GC与调优3
JVM系列笔记目录虚拟机的基础概念class文件结构class文件加载过程jvm内存模型JVM常用指令GC与调优调优前的基础概念1.吞吐量:用户代码时间/(用户代码执行时间垃圾回收时间)2.响应时间:STW越短,响应时间越好3.
Stella981 Stella981
3年前
JVM参数及调优
调优基本概念在调整JVM性能时,通常有三个组件需要考虑:1.堆大小调整2.垃圾收集器调整3.JIT编译器大多数调优选项都与调整堆大小和选择合适的垃圾收集器有关,JIT编译器对性能也有很大影响,但很少需要对其进行调优,尤其是针对较新版本的JVM。通常,在进行Java程序调优的时候,会重点关注两个主要指标:响应
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
京东云开发者 京东云开发者
5个月前
JDK11升级JDK17最全实践干货来了
1、前言如果你仍在使用JDK8,那你是否曾经遇到过OutOfMemoryError的问题?你是否曾经为JVM的调优问题感到困扰?本篇文章将为你介绍一种能够提供百倍性能提升的垃圾回收器,也许能够解决你的问题。上篇文章给大家带来了相信大家阅读后已经对JDK11