请教 JVM GC 问题

2021-11-30 14:54:51 +08:00
 shanghai1943
机器内存:4GB
JVM 信息:jdk1.8 ,默认的垃圾回收策略 -XX:+UseParallelGC

启动参数:-Xms3072M -Xmx3072M -Xmn64M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+HeapDumpOnOutOfMemoryError

前几天在某云平台收到了内存告警的短信,阈值是内存使用量超过 90%后触发。

登录到 ECS 机器上,使用 jmap -heap PID 命令查看,得到如下输出

Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 3221225472 (3072.0MB)
NewSize = 67108864 (64.0MB)
MaxNewSize = 67108864 (64.0MB)
OldSize = 3154116608 (3008.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 268435456 (256.0MB)
CompressedClassSpaceSize = 260046848 (248.0MB)
MaxMetaspaceSize = 268435456 (256.0MB)
G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
capacity = 57671680 (55.0MB)
used = 52005488 (49.59629821777344MB)
free = 5666192 (5.4037017822265625MB)
90.17508766867898% used

From Space:
capacity = 4718592 (4.5MB)
used = 98304 (0.09375MB)
free = 4620288 (4.40625MB)
2.0833333333333335% used

To Space:
capacity = 4718592 (4.5MB)
used = 0 (0.0MB)
free = 4718592 (4.5MB)
0.0% used

PS Old Generation
capacity = 3154116608 (3008.0MB)
used = 2557243672 (2438.7776107788086MB)
free = 596872936 (569.2223892211914MB)
81.07638333706146% used

从输出的信息上看,old gen 的使用量达到了 81%,应该是老年代一直没回收的原因导致的告警。


随后用 jmap 命令 dump 了一个堆栈信息到本地,大概有 3.24GB ,用 mat 工具查看,发现大对象加起来只有 99MB 而已
如图 https://imgtu.com/i/o1VSlq

想请问下,old gen 这么大的原因是没有达到回收的临界点么? dump 后的文件大小有 3GB ,但是用内存分析工具打开后就只有不到 100MB 的内存饼图,这是啥原因?感谢。
1065 次点击
所在节点    问与答
8 条回复
cubecube
2021-11-30 16:09:06 +08:00
old gen 这么大的原因是没有达到回收的临界点么?
---对
hand515
2021-11-30 16:24:50 +08:00
4g 的 90%也就 3.6g
你的 jvm 分配堆加 metaspace 都 3.2g 了
而且你的年轻代才分 64m ,老年代肯定很多垃圾

你这内存参数不太合理
shanghai1943
2021-11-30 16:28:52 +08:00
@hand515 了解。感谢回复。打算调高年轻代的大小到 128m 或者 256m 。也在考虑要不要转到 G1GC 上。
JDog
2021-11-30 16:34:55 +08:00
大胆一点,不要设置内存参数
hand515
2021-11-30 16:38:07 +08:00
128m 也太小气了,如果你的对象大多是生命周期不是很长的,可以适当再大点,能在 younggc 时就回收了,当然,太大了 ygc 的耗时也会大点,自己测试下找个平衡吧
shanghai1943
2021-11-30 16:41:35 +08:00
@hand515 嗯嗯好的。感谢指点。
shanghai1943
2021-11-30 16:41:49 +08:00
@JDog 啊这。。太奔放了吧。。
dqzcwxb
2021-11-30 17:48:31 +08:00
换 G1 保平安

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819035

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX