我有一个阻塞队列,工作人员从该队列中取出然后工作大约1-10毫秒。
我想弄清楚工人在给定时间内活跃和闲置多少时间的相对数字(例如,最后一分钟活跃70%)。
总结短暂的1ms周期可能是不准确的,并且纳米时间消耗可以达到很高的性能。
是否有一些巧妙的方法来完成这样的任务?
我在代码中经常使用这些队列工作者设置,因此我希望能够在运行时分析瓶颈。
编辑:我只想知道线程是否可以正常工作。如果操作系统将线程移出处理焦点,它仍应计数。只有在等待队列锁定时才应计入空闲时间。
答案 0 :(得分:2)
如何对池中每个线程的Thread.getState()进行采样,然后报告采样时每个状态中线程的百分比?
通过这种方式,您可以了解线程被发现处于NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING和TERMINATED的频率。
我能想到的唯一其他方法是在分析工具中运行代码。 YourKit的Java分析器非常好,并附带1530天的试用许可证......