我有一个阻塞队列,工作人员从该队列中获取数据,然后工作大约 1-10 毫秒。
我想计算出在给定时间范围内工作人员处于 Activity 状态和空闲状态的相对数字(例如,最后一分钟有 70% 处于 Activity 状态)。
总结短的 1ms 周期可能不准确,并且获取纳秒时间会消耗大量性能。
有什么巧妙的方法来完成这样的任务吗?
我的代码中更频繁地使用这些队列工作程序设置,因此我希望能够在运行时分析瓶颈。
编辑:我只想知道线程是否可以正常工作。如果操作系统将线程移出处理焦点,它仍应计数。只有等待队列锁的时候才算空闲时间。
最佳答案
是否有一种方法可以对池中每个线程的 Thread.getState() 进行采样,然后报告采样时处于每种状态的线程百分比?
这样您就可以了解线程处于 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 和 TERMINATED 状态的频率。
我能想到的唯一其他方法是在分析工具中运行代码。 YourKit 的 Java 分析器非常好,并且附带 1530 天的试用许可证...
关于Java 测量线程的利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8302469/