zgc Allocation Stall问题

情况一、内存空间不足

对比监控出现性能毛刺时间点的GC日志和业务日志,发现JVM停顿了较长时间,且停顿时GC日志中有大量的“Allocation Stall”日志。

原因就是堆内存被占满,导致部分线程阻塞,如下图中的 High used已经达到100%

 解决办法:

1.最直接有效的办法就是增加堆大小

2.增加jvm参数 -XX:ZAllocationSpikeTolerance。调整正态分布模型预测系数ZAllocationSpikeTolerance默认值为2,值越大,越早的触发GC。优化后设置成5,xmx和xms可以考虑设置成不一样的值

3.还可以尝试 增加固定gc间隔 -XX:ZCollectionInterval 参数

情况二、gc初始化空间不足

背景:一个62G物理机上部署了2个24G的xmx的java进程

发生Application的时候,前后都没有占到情况一中占用达到100%的情况

原因:观察gc日志,在初始化阶段发现

 可以看出,jvm的堆初始化的时候,tmpfs -> /dev/shm 下面的可用空间不足(当然和具体的机器有关)。。限制一下其他使用tmpfs地方或者调整一下tmpfs大小

最后附上一篇zgc调优:https://tech.meituan.com/2020/08/06/new-zgc-practice-in-meituan.html

原文地址:https://www.cnblogs.com/lizo/p/14270686.html