如何通过jstat -gccause命令实时查看触发垃圾回收的具体原因?
- 内容介绍
- 文章标签
- 相关推荐
本文共计959个文字,预计阅读时间需要4分钟。
由于使用 `jstat -gc` 只会告诉你 发生了GC,而 `jstat -gccause` 会明确告诉你 为什么现在发生了GC。例如,看到 `Metadata GC Threshold`,你就知道是 Metaspace 快满了,而不是代码写错、内存泄漏,或者是类加载太多或未及时卸载。这个区别直接决定了你是否需要调整参数、检查类加载器,甚至可能需要升级 Spring Boot 的 auto-configuration。
jstat -gccause 的输出列怎么看
它和 jstat -gc 输出结构一致,但多出两列:LGCC(Last GC Cause)和 CGCC(Current GC Cause)。注意:这两列是字符串,不是数字。
-
LGCC:上一次 GC 是被什么触发的,例如Allocation Failure(Eden 满)、Metadata GC Threshold(Metaspace 达限)、System.gc()(有人手动调了) -
CGCC:当前采样时刻,**正在发生的 GC 是由什么触发的**。
本文共计959个文字,预计阅读时间需要4分钟。
由于使用 `jstat -gc` 只会告诉你 发生了GC,而 `jstat -gccause` 会明确告诉你 为什么现在发生了GC。例如,看到 `Metadata GC Threshold`,你就知道是 Metaspace 快满了,而不是代码写错、内存泄漏,或者是类加载太多或未及时卸载。这个区别直接决定了你是否需要调整参数、检查类加载器,甚至可能需要升级 Spring Boot 的 auto-configuration。
jstat -gccause 的输出列怎么看
它和 jstat -gc 输出结构一致,但多出两列:LGCC(Last GC Cause)和 CGCC(Current GC Cause)。注意:这两列是字符串,不是数字。
-
LGCC:上一次 GC 是被什么触发的,例如Allocation Failure(Eden 满)、Metadata GC Threshold(Metaspace 达限)、System.gc()(有人手动调了) -
CGCC:当前采样时刻,**正在发生的 GC 是由什么触发的**。

