Java Mission Control说"很少有分析样本",为什么,以及我的其他选择是什么?

时间:2017-09-24 23:09:21

标签: java performance profiling hprof java-mission-control

我正在使用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中进一步调试?它看起来似乎JVisualVM不再包含在Java 9中。

2 个答案:

答案 0 :(得分:1)

如果运行线程多于核心,则采样线程可能会缺乏,并且无法按指定的时间间隔唤醒。

答案 1 :(得分:1)

答案可能就像拥有比核心更多的线程一样简单,因此大多数线程在采样时没有在CPU上进行调度。 JFR方法采样器只会在CPU上保留线程样本。我们的想法是为您提供实际花费时间执行Java代码的视图。

现在,我们知道有些情况下您想要获取所有线程的随机样本,无论它们在做什么。我们正在JDK 10中添加新的性能分析功能/事件。