您当前的位置:首页 > 计算机 > 编程开发 > Java

JVM 实战调优

时间:12-14来源:作者:点击数:

JVM 调优主要就是调整下面两个指标

  • 停顿时间: 垃圾收集器做垃圾回收中断应用执行的时间。-XX:MaxGCPauseMillis
  • 吞吐量:花在垃圾收集的时间和花在应用时间的占比 -XX:GCTimeRatio=,垃圾收集时间占比:1/(1+n)

GC 调优步骤

  1. 打印GC日志 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:./gc.log
  2. 分析日志得到关键性指标
  3. 分析GC原因,调优JVM参数
Parallel Scavenge 收集器(默认)
  1. 分析 parallel-gc.log
  2. 第一次调优,设置 Metaspace 大小:增大元空间大小-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M
  3. 第二次调优,添加吞吐量和停顿时间参数:-XX:MaxGCPauseMillis=100 -XX:GCTimeRatio=99
  4. 第三次调优,修改动态扩容增量:-XX:YoungGenerationSizeIncrement=30
配置 CMS 收集器

-XX:+UseConcMarkSweepGC

分析 cms-gc.log

配置 G1 收集器

-XX:+UseG1GC

分析g1-gc.log

查看发生 MixedGC 的阈值:jinfo -flag InitiatingHeapOccupancyPercent 进程id

分析工具:gceasy,GCViewer

G1 调优相关

常用参数
  1. -XX:+UseG1GC 开启 G1
  2. -XX:G1HeapRegionSize=n,region 的大小,1-32M,2048个
  3. -XX:MaxGCPauseMillis=200 最大停顿时间
  4. -XX:G1NewSizePercent -XX:G1MaxNewSizePercent
  5. -XX:G1ReservePercent=10 保留防止 to space 溢出
  6. -XX:ParallelGCThreads=n SWT 线程数(停止应用程序)
  7. -XX:ConcGCThreads=n 并发线程数 = 1/4*并行
最佳实践
  1. 年轻代大小:避免使用-Xmn、-XX:NewRatio等显示设置Young区大小,会覆盖暂停时间目标(常用参数3)
  2. 暂停时间目标:暂停时间不要太严苛,其吞吐量目标是90%的应用程序时间和10%的垃圾回收时间,太严苛会直接影响到吞吐量
是否需要切换到 G1
  1. 50%以上的堆被存活对象占用
  2. 对象分配和晋升的速度变化非常大
  3. 垃圾回收时间特别长,超过1秒
G1 调优目标
  1. 6GB以上内存
  2. 停顿时间是500ms以内
  3. 吞吐量是90%以上
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐