Yourkit Java Profiler:Object.wait() 的 WALL TIME 测量可能不正确
Posted
技术标签:
【中文标题】Yourkit Java Profiler:Object.wait() 的 WALL TIME 测量可能不正确【英文标题】:Yourkit Java Profiler: WALL TIME is probably measured incorrectly for Object.wait() 【发布时间】:2017-07-12 10:06:45 【问题描述】:我要解决的最初问题是查看跨多个线程的方法的所有子调用的持续时间。但是我用一个小型应用程序复制了我的问题,其中我有一个线程执行一个大部分按预期等待的方法。
如您所见,我对 pool-1-thread-2 执行方法“com.sum.$Proxy10.uploadWaiting()”特别感兴趣 所以我确定这个方法在 getConnection() 中花费了大部分“WALL TIME”,它下降到 Object.wait(long) 但是我想看看在 com.sum.$Proxy10.uploadWaiting() 中的 getConnection() 中花费的 WALL TIME 的确切百分比是多少。 我去“方法列表”->我的方法->合并的被调用者
如您所见,getConnection() 仅占我方法总时间的 1%。而且我已经将我的采样配置为对所有方法进行挂壁时间。正如您在屏幕截图中看到的那样,这些都标记为 [Wall Time]。我正在使用 Yourkit 2015 build 15052。
问题:为什么 getConnection() 不显示 90% 之类的东西?还是只计算 CPU Time 而不是 Wall Time?
【问题讨论】:
【参考方案1】:Yourkit 支持回答了我的问题,答案是我必须使用
-Dyjp.zero.time.methods=false
为了使 UI 显示适当的 WALL TIME。默认情况下为 true,并覆盖包括挂起时间设置在内的所有内容。
放置位置取决于操作系统和 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>
【讨论】:
以上是关于Yourkit Java Profiler:Object.wait() 的 WALL TIME 测量可能不正确的主要内容,如果未能解决你的问题,请参考以下文章