0
点赞
收藏
分享

微信扫一扫

JVM调优--经验总结

无愠色 2022-02-15 阅读 72


简介

本文介绍JVM调优的一些常用经验。

正常的GC频率及时间

GC耗时太长、GC次数太多会影响进程的性能,导致进程响应变慢,或者无法响应。

正常的GC频率

正常的频率

YGC:10秒1次。

FGC:1天1次以内。

频率的优化

YGC的频率优化


  • 如果YoungGC频率远低于这个值,例如20秒1次,30秒1次,甚至60秒1次。这种情况下,JVM相当空闲,处于基本上无事可做的状态。建议缩容,减少服务器浪费;
  • 如果YoungGC频率远低于这个值,例如1秒/次,甚至1秒/好多次。这种情况下,JVM相当繁忙,建议按照如下步骤进行初步症断:

  • 检查Young区,Young区在整个堆占比在25%~40%比较合理,如果Young区太小,建议扩大Xmn。
  • 检查SurvivorRatio,保持默认值8即可,Eden:S0:S1=8:1:1是一个比较合理的值;


正常的GC时间

YGC:100ms以内

FGC:1秒以内

频繁FGC 的常见原因


  1. 大对象
  1. 系统一次性加载了过多数据到内存中(比如SQL查询未做分页),导致大对象进入了老年代。
  1. 内存泄漏
  1. 频繁创建了大量对象,但是无法被回收(比如IO对象使用完后未调用close方法释放资源),先引发FGC,最后导致OOM.
  1. 程序频繁生成一些长生命周期的对象
  1. 当这些对象的存活年龄超过分代年龄时便会进入老年代,最后引发FGC. (即本文中的案例)
  1. 程序BUG
  1. 程序BUG导致动态生成了很多新类,使得 Metaspace 不断被占用,先引发FGC,最后导致OOM. 代码中显式调用了gc方法,包括自己的代码甚至框架中的代码。
  1. JVM参数设置问题
  1. 包括总内存大小、新生代和老年代的大小、Eden区和S区的大小、元空间大小、垃圾回收算法等等。


举报

相关推荐

0 条评论