321 字
2 分钟
工作记录:新生代老年代比例错误问题

线上排查:新生代老年代比例错误问题
起因
线上一个应用频繁full gc,排查发现单pod总内存3g的情况下新生代只有200mb,很奇怪,于是到容器里查看jvm参数。
jamp -heap 1,打印
Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 3221225472 (3072.0MB) NewSize = 261685248 (249.5625MB) MaxNewSize = 261685248 (249.5625MB) OldSize = 2959540224 (2822.4375MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 268435456 (256.0MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 268435456 (256.0MB) G1HeapRegionSize = 0 (0.0MB)
Heap Usage:New Generation (Eden + 1 Survivor Space): capacity = 235536384 (224.625MB) used = 45215760 (43.12110900878906MB) free = 190320624 (181.50389099121094MB) 19.19693222428005% usedEden Space: capacity = 209387520 (199.6875MB) used = 33745216 (32.18194580078125MB) free = 175642304 (167.50555419921875MB) 16.116154391627543% usedFrom Space: capacity = 26148864 (24.9375MB) used = 11470544 (10.939163208007812MB) free = 14678320 (13.998336791992188MB) 43.866318628602755% usedTo Space: capacity = 26148864 (24.9375MB) used = 0 (0.0MB) free = 26148864 (24.9375MB) 0.0% usedconcurrent mark-sweep generation: capacity = 2959540224 (2822.4375MB) used = 279529808 (266.5803985595703MB) free = 2680010416 (2555.8571014404297MB) 9.445041690367646% usedNewRatio确实是2,但是新生代是224mb,老年代是2.8g,比例确实和监控一样,不符合默认的1:2配比
排查
一番排查,google“NewRatio not work”后,发现一个JDK的bug: https://bugs.openjdk.org/browse/JDK-8153578
检查下JVM参数,确实使用了UseConcMarkSweepGC
解决
在启动参数中指定新生代GC算法-XX:+UseParNewGC后,重新发布解决 解决方式还可以在启动参数里指定-XXNewRatio=2解决,不过我们是用的指定新生代算法
工作记录:新生代老年代比例错误问题
https://www.intotw.cn/posts/work-jvm-heap-ratio/分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 1106 天
部分内容可能已过时