我们如何使用 VisualVM 或任何其他工具知道我的 Java 程序中当前正在执行哪种类型的 GC(young/full)?
How do we know which type of GC(young/full) is currently being executed in my Java Program using VisualVM or any other tool?
我正在使用 VisualVM 工具对程序进行性能分析。我能够检查程序的 CPU 使用情况和堆使用情况,但无法确定当前正在执行哪种类型的 GC(年轻 GC/full GC)。无论如何可以使用 VisualVM 找到它,或者有任何其他工具吗?
我不是 VisualVM 专家,所以我不知道如何使用。但我可以为您提供几个替代方案
JSTAT
你可以使用jstat
查看正在执行哪种gc
首先我们需要发现您的 Java 运行 进程的 PID。为此,我们可以使用 jps。在此示例中,运行 Eclipse IDE.
jps
10156 org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar
现在使用下面的命令jstat -gc 10156 1s
1s
指的是采样间隔。您可以使用适合您需要的任何一种。
这个命令输出一个table,有很多列,我发现很难格式化(抱歉),所以请关注这两个
- YGC:新生代垃圾回收 (GC) 事件的数量。
- FGC:完整 GC 事件的数量。
观察这两个计数器可以让您大致了解正在执行的收集类型。
JVM 标志
此外,您可以使用 JVM 标志
-Xlog:gc*
对于 java 11
-XX:+PrintGCDetails
对于 java 8
这将在控制台打印所有 GC 详细信息:内存占用 before/after 每个收集、花费的时间、人体工程学...
这个标志的输出有点难以理解,因为它取决于您的 JVM 实现、选择的 GC、JVM 标志...
我正在使用 VisualVM 工具对程序进行性能分析。我能够检查程序的 CPU 使用情况和堆使用情况,但无法确定当前正在执行哪种类型的 GC(年轻 GC/full GC)。无论如何可以使用 VisualVM 找到它,或者有任何其他工具吗?
我不是 VisualVM 专家,所以我不知道如何使用。但我可以为您提供几个替代方案
JSTAT
你可以使用jstat
查看正在执行哪种gc首先我们需要发现您的 Java 运行 进程的 PID。为此,我们可以使用 jps。在此示例中,运行 Eclipse IDE.
jps
10156 org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar
现在使用下面的命令jstat -gc 10156 1s
1s
指的是采样间隔。您可以使用适合您需要的任何一种。
这个命令输出一个table,有很多列,我发现很难格式化(抱歉),所以请关注这两个
- YGC:新生代垃圾回收 (GC) 事件的数量。
- FGC:完整 GC 事件的数量。
观察这两个计数器可以让您大致了解正在执行的收集类型。
JVM 标志
此外,您可以使用 JVM 标志
-Xlog:gc*
对于 java 11-XX:+PrintGCDetails
对于 java 8
这将在控制台打印所有 GC 详细信息:内存占用 before/after 每个收集、花费的时间、人体工程学...
这个标志的输出有点难以理解,因为它取决于您的 JVM 实现、选择的 GC、JVM 标志...