通过使用JMC进行评测,在墙上时钟时间方面获得昂贵的java方法

通过使用JMC进行评测,在墙上时钟时间方面获得昂贵的java方法,java,java-8,profiling,jmc,jfr,Java,Java 8,Profiling,Jmc,Jfr,我有一个java应用程序,它可以进行很多外部http调用。为了确定热方法,我在所有方法中都使用了System.currentTimeMillis(),并且我观察到,实际进行外部HTTP调用的方法都是热方法,这是意料之中的 但是,当我使用(JMC)分析应用程序时,code选项卡列表下的Hot-Methods是完全不同的。事实上,在JMC列表中,几乎没有任何进行外部HTTP调用的方法 谁能告诉我:- 热方法(在代码部分下)是基于CPU时间还是 挂钟时间 有什么方法可以查看 事实上,你要花更多的挂钟时

我有一个java应用程序,它可以进行很多外部http调用。为了确定热方法,我在所有方法中都使用了
System.currentTimeMillis()
,并且我观察到,实际进行外部HTTP调用的方法都是热方法,这是意料之中的

但是,当我使用(JMC)分析应用程序时,
code
选项卡列表下的
Hot-Methods
是完全不同的。事实上,在JMC列表中,几乎没有任何进行外部HTTP调用的方法

谁能告诉我:-

  • 热方法(在
    代码部分下)是基于CPU时间还是
    挂钟时间
    
  • 有什么方法可以查看 事实上,你要花更多的挂钟时间吗
  • 如果JMC不支持显示
    热方法列表
    是否有其他工具显示此列表
  • 直方图基于执行Java代码的线程的CPU时间

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


  • JDK10有一个新事件,它对本机的方法进行采样,而不管该方法是在运行代码还是在等待。它可能会显示等待I/O的方法,但是在JMC中没有这些事件的可视化。

    如果您可以让它在墙上时钟时间而不是CPU时间采样,那么很难从JMC和JFR文档中分辨出来。如果您只在CPU时间上采样,它不会显示您在I/O上花费的时间。是否有其他工具允许我为Java应用程序这样做?那么,根据时钟时间确定热门方法的最佳方法是什么?这就是我现在在函数的入口和出口处使用
    System.currentTimeMillis()
    的方法吗?许多人所依赖的方法不是测量时间。它通过随机捕获10-20个堆栈样本来完成,例如使用jstack实用程序。你可以从中看出很多东西。你想知道哪些方法是“热门”的吗?他们是那些在堆栈上的一个高比例的时间。示例:如果方法A占用了40%的挂钟时间,那么每个样本都有40%的机会看到它,因此它或多或少会出现在40%的样本上。无论A是大的并且只调用一次,还是小的并且调用了一百万次,这都是有效的。