通过使用 JMC 进行分析,在挂钟时间方面获得昂贵的 java 方法

Getting expensive java methods in terms of wall clock time by profiling using JMC

我有一个 java 应用程序,它会进行大量外部 http 调用。为了识别热点方法,我在所有方法中都使用了 System.currentTimeMillis() 并且我观察到实际进行外部 HTTP 调用的方法是热点方法,这是意料之中的。

但是当我使用 Java Mission Control(JMC) 分析应用程序时,Code 选项卡列表下的 Hot Methods 完全不同。事实上,几乎 none 的进行外部 HTTP 调用的方法出现在 JMC 列表中。

有人可以告诉我吗:-

  1. Hot Methods(under Code section)是基于CPU时间还是 挂钟时间?
  2. 有什么方法可以查看方法列表 实际上花费了更多的挂钟时间?
  3. 如果 JMC 不支持显示列表 Hot Methods 是否有任何其他工具可以显示这个?
  1. 直方图基于执行 Java 代码的线程的 CPU 时间。

  2. 不,但是有一个视图可以让您看到由锁争用、套接字和文件引起的延迟在哪里 I/O,但它不会给出聚合时间,只会给出离群值.

JDK 10 有一个新事件,它对原生方法进行采样,无论该方法是 运行 代码还是等待。它可能显示正在等待的方法 I/O 然而,在 JMC 中没有这些事件的可视化。