-1

我要解决的第一个问题是查看跨多个线程的方法的所有子调用的运行时间。但是我用一个小型应用程序复制了我的问题,其中我有一个线程执行一个主要按预期等待的方法。

在此处输入图像描述

如您所见,我对 pool-1-thread-2 执行方法“com.sum.$Proxy10.uploadWaiting()”特别感兴趣,所以我确定该方法在 getConnection( ) 下降到 Object.wait(long) 但是我想看看在 com.sum.$Proxy10.uploadWaiting() 中的 getConnection() 中花费的 WALL TIME 的确切百分比是多少。我去“方法列表”->我的方法->合并的被调用者

在此处输入图像描述

如您所见,getConnection() 仅占我方法总时间的 1%。而且我已经将我的采样配置为对所有方法进行挂壁时间。正如您在屏幕截图中看到的那样,这些都标记为 [Wall Time]。我正在使用 Yourkit 2015 build 15052。

问题:为什么 getConnection() 不显示 90% 之类的东西?它仍然只计算 CPU 时间而不计算 Wall Time 吗?

4

1 回答 1

2

Yourkit support 回答了我的问题,答案是我必须使用

-Dyjp.zero.time.methods=false

为了使 UI 显示适当的 WALL TIME。默认情况下它是正确的,并且会覆盖包括挂起时间设置在内的所有内容。

放置它的位置取决于操作系统和 Yourkit 的版本:https: //www.yourkit.com/docs/kb/open_huge_snapshot.jsp对我来说(MacOS 和 Yourkit 版本 2015)它恰好是:

<key>JVMOptions</key>
<array>
...
<!-- my fix to the UI-->
<string>-Dyjp.zero.time.methods=false</string>
</array>
于 2017-07-12T17:08:46.583 回答