Java Mission Control 7.1 显示的方法分析样本太少

Java Mission Control 7.1 shows too few method profiling samples

有人问了类似的问题 here

我正在使用我根据 instructions.

构建的 JMC 7.1.0 分析一个 Open JDK 11.0.2 应用程序

该应用程序使用了大约 3 个内核,没有过多的 gc,并且只有一小部分时间线程在执行实际使用 CPU.

的本机方法调用

我使用的是 10 毫秒的默认方法采样间隔。 我使用以下方法启用了安全点之外的调试元数据:

-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints

采集的样本数量比我预期的要少得多。 保守地假设在每个采样点 cpu 线程 运行 上有 1 个非本机代码,我预计每秒 100 个样本。然而我每秒只能看到 1 个样本。

机器本身通常有50%空闲,所以采样线程不会饿死。

是什么导致样本数量如此之少?

这可能是由于 JDK11 中引入的错误,该错误出现在具有多个线程的应用程序中。它已在 JDK 12 中修复并反向移植到 11.0.3。

详情见:

https://bugs.openjdk.java.net/browse/JDK-8215727

关于采样间隔。默认速率为 20 毫秒,但这并不意味着会有 50 个样本/秒。这是 JVM 尝试对一个或 个线程进行采样的时间间隔。