如何利用GC日志中的Allocation Failure追踪因TLAB空间短缺引发的年轻代回收频繁问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计711个文字,预计阅读时间需要3分钟。
分配给F的样式为红色
看 GC 日志中 Eden 区的回收效率是否异常高
TLAB 分配失败通常不伴随 Eden 大量存活对象,因此 Minor GC 后 Eden 使用量应极低,且 Survivor 区几乎无对象晋升。典型日志模式如下:
-
GC 前 Eden 占用率很高(如 95%+),但 GC 后骤降至 1%~5%,例如:
[PSYoungGen: 1280509K->5120K(1308160K)] - 每次 GC 回收掉 99% 以上 Eden 对象,说明对象生命周期极短,且未在 TLAB 外触发大块分配
- Survivor 区使用量长期稳定在极小值(如几 KB),且老年代占用几乎零增长,排除晋升压力
查日志中是否频繁出现 “TLAB” 相关关键词(JDK 10+ 更明显)
从 JDK 10 起,开启 -Xlog:gc+alloc=debug 或 -Xlog:gc+tlab=debug 可输出 TLAB 分配详情。
本文共计711个文字,预计阅读时间需要3分钟。
分配给F的样式为红色
看 GC 日志中 Eden 区的回收效率是否异常高
TLAB 分配失败通常不伴随 Eden 大量存活对象,因此 Minor GC 后 Eden 使用量应极低,且 Survivor 区几乎无对象晋升。典型日志模式如下:
-
GC 前 Eden 占用率很高(如 95%+),但 GC 后骤降至 1%~5%,例如:
[PSYoungGen: 1280509K->5120K(1308160K)] - 每次 GC 回收掉 99% 以上 Eden 对象,说明对象生命周期极短,且未在 TLAB 外触发大块分配
- Survivor 区使用量长期稳定在极小值(如几 KB),且老年代占用几乎零增长,排除晋升压力
查日志中是否频繁出现 “TLAB” 相关关键词(JDK 10+ 更明显)
从 JDK 10 起,开启 -Xlog:gc+alloc=debug 或 -Xlog:gc+tlab=debug 可输出 TLAB 分配详情。

