JVM学习总结——十二、JVM一次调优优化过程

问题

最近接触一个项目,项目灰度测试时发现3次下单2次超时。这就比较恐怖了,业务方之间反馈出来了,通过排查日志发现一个组装参数的方法耗时大概300~500ms,现在的RPC接口肯定不能接受。

排查方式

通过观察Young GC 发现一次300多ms,时间也正好吻合。

机器配置 2C4G

每次FullGC后,内存都能回到某一个值可以排除内存泄漏的情况

解决方式:

对垃圾回收器进行参数调优,调优过程发现程序处理问题的复杂度不同参数也需要微调

最主要的是当程序足够复杂,JVM参数调优是不明显或者没有改观。

JVM参数给出:

-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=50 -XX:ParallelGCThreads=2 -XX:CICompilerCount=2 -XX:ConcGCThreads=1 -XX:InitiatingHeapOccupancyPercent=30 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=4m -XX:+UseCompressedOops -XX:CompressedClassSpaceSize=128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+AlwaysPreTouch -XX:+UnlockDiagnosticVMOptions

首先添加GC日志

XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps -Xloggc:gc.log

  1. -XX:+PrintGC 输出简要GC日志

  2. -XX:+PrintGCDetails 输出详细GC日志

  3. -Xloggc:gc.log 输出GC日志到文件

  4. -XX:+PrintGCTimeStamps 输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式)

  5. -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

  6. -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息

  7. -verbose:gc

  8. -XX:+PrintReferenceGC 打印年轻代各个引用的数量以及时长跟踪软引用、弱引用、虚引用和Finallize队列。

  9. -XX:+PrintGCApplicationConcurrentTime 打印应用程序的执行时间
    -XX:+PrintGCApplicationStoppedTime 打印应用由于GC而产生的停顿时间

根据GC日志选择添加和调优

-XX:CompileThreshold=100 -XX:-UseCounterDecay  -XX:+OptimizeStringConcat  -XX:+UseStringCache

通常根据 -XX:InitiatingHeapOccupancyPercent 和-XX:G1MaxNewSizePercent、-XX:G1HeapRegionSize=4m 调优

通过 -XX:CompressedClassSpaceSize=128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m 设置方法区大小

-Xms2048m -Xmx2048m 初始化堆大小 调整 同最大堆大小 可提高性能,,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术分子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值