记一次线上生产JVM调优过程。

一. 线上问题,no BB,看图

应用堆内存使用情况如下图:

JVM调优案例

 

应用youngGC如下图:

JVM调优案例

这里没有给出fullGC的图片,基本上每一小时一次fullGC。

正常应用堆内存使用情况如下

JVM调优案例

正常应用youngGC情况

JVM调优案例

 

二. 分析

正常应用youngGC比较频繁,每次时间短;有问题应用youngGC次数少,每次GC时间长;且fullGC均能回收系统内存;

怀疑新生代和老年代的比例或新生代eden和Survivor比例不合理导致。可以使用-XX:NewRatio和 -XX:SurvivorRatio调整

-XX:NewRatio=2   :新生代和年老代的堆内存占用比例, 例如2表示新生代占年老代的1/2,占整个堆内存的1/3
-XX:SurvivorRatio=8: Eden与Survivor的占用比例。例如8表示,一个survivor区占用 1/8 的Eden内存,即1/10的新生代内存,为什么不是1/9?因为我们的新生代有2个survivor,即S0和S1。所以survivor总共是占用新生代内存的 2/10,Eden与新生代的占比则为 8/10

三. 结论

经过多次测试,设置-XX:NewRatio=4 应用内存得到改善,默认是-XX:NewRatio=2,堆内存使用如下图,调整后堆内存使用在1G以下。

JVM调优案例

欢迎探讨!

参考

https://www.cnblogs.com/langtianya/p/3898760.html

https://blog.csdn.net/sunny243788557/article/details/52796904

https://www.jianshu.com/p/8d8aef212b25

相关文章:

  • 2021-11-18
  • 2021-04-14
  • 2022-01-30
  • 2022-12-23
  • 2021-07-12
  • 2021-06-19
  • 2021-09-07
  • 2021-08-27
猜你喜欢
  • 2022-12-23
  • 2021-07-25
  • 2021-08-07
  • 2022-01-23
相关资源
相似解决方案