【问题标题】:Java measure utilization of threadsJava 测量线程的利用率
【发布时间】:2011-11-28 21:19:59
【问题描述】:

我有一个阻塞队列,工作人员从该队列中取出,然后工作大约 1-10 毫秒。

我想弄清楚在给定时间范围内工作人员处于活动状态和空闲状态的相对时间(例如,最后一分钟有 70% 处于活动状态)。

总结短短的 1 毫秒周期可能是不准确的,并且获取纳秒时间会消耗很多性能。

有没有一些巧妙的方法来完成这样的任务?

我的代码中更频繁地设置了这些队列工作者,因此我希望能够在运行时分析瓶颈。

编辑:我只想知道线程是否可以工作。如果操作系统将线程移出处理焦点,它仍应计数。只有在等待队列锁的时候才算作空闲时间。

【问题讨论】:

  • 澄清:您想知道每个给定线程的 CPU 时间或给定对象中任何线程消耗的 CPU 时间吗?

标签: java multithreading performance profile blockingqueue


【解决方案1】:

如何对池中每个线程的 Thread.getState() 进行采样,然后报告采样时处于每个状态的线程的百分比?

这样您就可以了解线程处于 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 和 TERMINATED 状态的频率。

我能想到的唯一其他方法是在分析工具中运行您的代码。 YourKit 的 Java profiler 非常好用,附带 1530 天试用许可证...

http://www.yourkit.com/java/profiler/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2017-12-28
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多