【问题标题】:Why does jProfiler show Unsafe.park/unpark as using CPU cycles?为什么 jProfiler 将 Unsafe.park/unpark 显示为使用 CPU 周期?
【发布时间】:2012-03-21 10:12:15
【问题描述】:

我们正在使用相当多的 ExecutorServices 运行服务。

当使用 jProfiler 7.1 (sampling, Runnable) 分析服务时,我们可以看到 sun.misc.Unsafe.park + unpark 是当前在热点中使用大部分 CPU 时间的调用。

http://i.stack.imgur.com/wT2Cj.jpg

这令人费解。

Park 和 unpark 应该是阻塞的,因此不使用任何 CPU 周期(或至少少量)。 这是来自 jprofiler 的某种错误(即没有检测到它,因为它在 sun.misc 包中?)还是我们在使用 ExecutorService 框架时实际上有问题?

【问题讨论】:

  • 您是否有可能附加了一个可能会暂停某些线程的调试器?
  • 不,没有附加调试器。此外,正如跟踪所暗示的那样,大部分“时间”都花在了 ExecutorService 的 getTask 部分中
  • 我们希望这只是 jProfiler 中的一个“错误”。我很难相信 Executor 服务中的 Worker 线程实际上在等待任务时正在消耗周期。
  • @RasmusFuglsang 我想说这更有可能是 jProfiler 中的一个错误。例如,我知道 hprof 在输入方法之前和之后都需要一个开始时间。可能 jprofiler 没有考虑线程的暂停并将其计为花费的时间
  • @RasmusFuglsang JProfiler 支持在这里,它看起来确实像一个错误。这当然不是正常行为,并且不会发生在我们的测试用例和我们测试的 JVM 中。 Unsafe.park() 和 Unsafe.unpark() 是特殊方法,由我们专门处理。 “JDBC 示例”会话是否也会发生这种情况(它也使用线程池)?请写信至 support@ej-technologies.com,详细了解您正在使用的 JVM 版本以及运行已分析 JVM 的平台。

标签: java multithreading sun jprofiler


【解决方案1】:

这在 JProfiler 7.1.1 中已修复。当您断开连接并重新连接到已分析的 JVM 时,可能会发生这种情况。

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多