此处提出了类似的问题。
我正在使用根据说明构建的 JMC 7.1.0 分析 Open JDK 11.0.2 应用程序。
该应用程序使用了大约 3 个内核,没有过多的 gc,并且只有一小部分时间线程正在执行实际使用 CPU 的本机方法调用。
我使用的是 10 毫秒的默认方法采样间隔。我使用以下方法启用了安全点之外的调试元数据:
-XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints
采集的样本数量比我预期的要少得多。保守地假设在每个采样点有 1 个运行非本机代码的 cpu 线程,我预计每秒 100 个样本。然而,我只看到 1 个样本/秒。
机器本身通常有 50% 空闲,所以采样线程不会被饿死。
是什么导致样本数量如此之低?