JVM性能调优(Parallel Scavenge、CMS、G1、参数设置)

JVM性能调优

JVM调优主要指标

停顿时间:垃圾收集器做垃圾回收中断应用执行的时间(就是一次Full GC的时间),可通过 -XX:MaxGCPauseMillis进行配置,这个并不是你配置了之后就会按照你设置的时间执行,JVM用自适应的方式让Full GC时间接近你设置的时间。

吞吐量:垃圾收集的时间和总时间的占比:1/(1+n),吞吐量就是1减去垃圾收集时间占总时间的占比,1-1/(1+n) , 可通过-XX:GCTimeRatio进行配置。

GC调优步骤

打印GC日志

#     打印GC日志            GC时间                 GC日期               输出到文件
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.log

Tomcat则直接加在JAVA_OPTS变量里,Jar包则直接 java [参数] -jar XXX.jar

  • 分析日志得到关键性指标

  • 分析GC原因,调优JVM参数

GC日志格式解读

首先我们先认识一下各种收集器的GC日志格式,以及日志格式表达了啥,以下为了方便演示我使用的是Jar包的方式启动

Parallel Scavenge收集器(默认)

Parallel Scavenge是JDK 1.8的默认收集器,所以我们启动时候无需任何配置,以下我启动一个服务并且打印日志内容到当前目录下的gc-parallel.log文件中

在这里插入图片描述

以下就是打印出来的GC日志我对一些主要内容进行了解答

在这里插入图片描述

CMS收集器

指定使用CMS收集器启动

在这里插入图片描述

以下就是打印出来的GC日志我对一些主要内容进行了解答

在这里插入图片描述

G1收集器

指定使用G1收集器启动

在这里插入图片描述

G1收集器日志比较复杂,我只标记了我了解的部分

在这里插入图片描述

gceasy工具使用

在实际应用中调优一般是使用可视化工具的,gceasy是一个在线GC调优的网站,使用很简单只需要上传你本地的gc日志,就会生成相应的图表,分析你的JVM的GC情况

gceasy:https://gceasy.io/

在这里插入图片描述

Throughput吞吐量,Latency停顿时间(avg平均、Max最大)

在这里插入图片描述

GC常用参数

堆栈设置
参数说明
-Xss每个线程的栈大小
-Xms初始堆大小,默认物理内存的1/64
-Xmx最大堆大小,默认物理内存的1/4
-Xmn新生代大小
-XX:NewSize设置新生代初始大小
-XX:NewRatio默认2表示新生代占年老代的1/2,占整个堆内存的1/3
-XX:SurvivorRatio默认8表示一个survivor区占用1/8的Eden内存,即1/10的新生代内存
-XX:MetaspaceSize设置元空间大小
-XX:MaxMetaspaceSize设置元空间最大允许大小,默认不受限制,JVM Metaspace会进行动态扩展
垃圾回收统计信息
参数说明
-XX:+PrintGC打印GC日志
-XX:+PrintGCDetails打印日期
-XX:+PrintGCTimeStamps打印时间
-Xloggc:filename输出到文件
收集器设置
参数说明
-XX:+UseSerialGC设置串行收集器
-XX:+UseParallelGC设置并行收集器
-XX:+UseParallelOldGC老年代使用并行回收收集器
-XX:+UseParNewGC在新生代使用并行收集器
-XX:+UseParalledlOldGC设置并行老年代收集器
-XX:+UseConcMarkSweepGC设置CMS并发收集器
-XX:+UseG1GC设置G1收集器
-XX:ParallelGCThreads设置用于垃圾回收的线程数
并行收集器设置
参数说明
-XX:ParallelGCThreads设置并行收集器收集时使用的CPU数。并行收集线程数
-XX:MaxGCPauseMillis设置并行收集最大暂停时间
-XX:GCTimeRatio设置垃圾回收时间占程序运行时间的百分比,公式为1/(1+n)
-XX:YoungGenerationSizeIncrement年轻代gc后扩容比例,默认是20(%)
CMS收集器设置
参数说明
-XX:+UseConcMarkSweepGC设置CMS并发收集器
-XX:+CMSIncrementalMode设置为增量模式。适用于单CPU情况
-XX:ParallelGCThreads设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数
-XX:CMSFullGCsBeforeCompaction设定进行多少次CMS垃圾回收后,进行一次内存压缩
-XX:+CMSClassUnloadingEnabled允许对类元数据进行回收
-XX:UseCMSInitiatingOccupancyOnly表示只在到达阀值的时候,才进行CMS回收
-XX:+CMSIncrementalMode设置为增量模式。适用于单CPU情况
-XX:ParallelCMSThreads设定CMS的线程数量
-XX:CMSInitiatingOccupancyFraction设置CMS收集器在老年代空间被使用多少后触发
-XX:+UseCMSCompactAtFullCollection设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
G1收集器设置
参数说明
-XX:+UseG1GC使用G1收集器
-XX:ParallelGCThreads指定GC工作的线程数量
-XX:G1HeapRegionSize指定分区大小(1MB~32MB,且必须是2的幂),默认将整堆划分为2048个分区
-XX:GCTimeRatio(重要)吞吐量大小,0-100的整数(默认9),值为n则系统将花费不超过1/(1+n)的时间用于垃圾收集
-XX:MaxGCPauseMillis(重要)目标暂停时间(默认200ms)
-XX:G1NewSizePercent新生代内存初始空间(默认整堆5%)
-XX:G1MaxNewSizePercent新生代内存最大空间
-XX:TargetSurvivorRatioSurvivor填充容量(默认50%)
-XX:MaxTenuringThreshold最大任期阈值(默认15)
-XX:InitiatingHeapOccupancyPercen老年代占用空间超过整堆比IHOP阈值(默认45%),超过则执行混合收集
-XX:G1HeapWastePercent堆废物百分比(默认5%)
-XX:G1MixedGCCountTarget参数混合周期的最大总次数(默认8)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JolyouLu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值