我正在使用 Java Mission Control 分析 Java 应用程序,它在飞行记录的主页上说“即使 CPU 负载很高,该记录也包含很少的分析样本。因此分析数据可能不相关。”
好像说的是实话。我要求它每 10 毫秒采样 3 分钟,这应该是 18000 个样本,但我只看到 996 个样本。
它继续解释“因此分析数据可能不相关。这可能是因为应用程序正在运行大量 JNI 代码,或者 JVM 在 GC、类加载、JIT 编译等方面花费了大量时间。”
嗯,我没有任何本机方法,它不应该在我记录的阶段加载类或执行任何 JIT(以及代码的重复数字处理部分。)它看起来不像花费过多的垃圾收集时间。
我们曾经使用 hprof 来分析这个产品,并取得了很大的成功。Hprof 极大地帮助确定了我们依赖主线程执行的位置,因此我们可以将热点并行化为多个线程。但是该工具在 Java 9 中已停止使用,因此我们将继续使用 Java Mission Control。它有很多用途,但如果它无法识别 VM 线程在随机采样时间所在的行号,它就不是很有用。还有其他工具可以使用吗?或者,有没有办法从 Java Mission Control 中进一步调试?Java 9 中似乎也不再包含 JVisualVM。