-
问题:应用发布后,刚接入流量后young gc频繁导致调用方超时
-
行动:
-
分析GC日志:发现每次young gc 分配的eden区域大小都不是固定的。有时候默认分配的非常小,导致youngGC频繁
-
分析jvm设置:(没有设置-xmn,eden大小采用动态平衡算法)
-
eden 大小分为动态平衡和固定大小,如果不设置,则默认为动态平衡。
-
动态平衡:应用没有设置eden区域大小(从参数上来看没有设置 –xmn ),默认eden 最小值是 总堆栈的5%,最大值为60%
-
-
调大eden最小值大小,让系统在一个稳定区间波动,以至于不那么容易发生young gc。
-
调整JVM设置:
-
-XX:+UnlockExperimentalVMOptions
-XX:G1NewSizePercent=35
-XX:G1MaxNewSizePercent=60
-
G1NewSizePercent 这个不是随便设置的,而是根据hickwall 中eden 的平均使用大小来计算的。
-
-
-
效果:young gc max 从27次/分钟,降低到11次/分钟,STW time 从560ms,下降到250ms,服务每秒停顿时间变短了。
04-16
6811
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-29
4663
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-23
930
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-23
959
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-10