Yourkit Java Profiler:对于Object.wait()

时间:2017-07-12 10:06:46

标签: java profiling yourkit

我试图解决的最初问题是在多个线程中查看方法的所有子查询的挂起时间。但是我用一个小应用程序复制了我的问题,我有一个线程执行一个大多等待预期的方法。

enter image description here

如您所见,我对pool-1-thread-2执行方法“com.sum。$ Proxy10.uploadWaiting()”特别感兴趣 所以我肯定知道这个方法在getConnection()中占用了大部分“WALL TIME”,这些内容一直延伸到Object.wait(long) 但后来我想知道在com.sum。$ Proxy10.uploadWaiting()中getConnection()花费的WALL TIME的确切百分比是多少。 我去“方法列表” - >我的方法 - > Merged Callees

enter image description here

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

问题:为什么getConnection()没有显示90%的内容?它仍然只计算CPU时间而不是计算壁时间吗?

1 个答案:

答案 0 :(得分:1)

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

-Dyjp.zero.time.methods =假

为了使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>