Java 测量线程的利用率

标签 java multithreading performance profile blockingqueue

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

我想计算出在给定时间范围内工作人员处于 Activity 状态和空闲状态的相对数字(例如,最后一分钟有 70% 处于 Activity 状态)。

总结短的 1ms 周期可能不准确,并且获取纳秒时间会消耗大量性能。

有什么巧妙的方法来完成这样的任务吗?

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

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

最佳答案

是否有一种方法可以对池中每个线程的 Thread.getState() 进行采样,然后报告采样时处于每种状态的线程百分比?

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

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

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

关于Java 测量线程的利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8302469/

相关文章:

java - PaintComponent 未被调用 - Java

multithreading - 我不明白信号量和锁之间的区别

MongoDB 查找和迭代 vs 计数

Java11 和 JMockit 1.43 Java.lang.UnsatisfiedLinkError 在 Jmockit 模型 System.currentTimeMillis 时发生

java - 用Java绘制不断增大的图像

java - 为什么 Semaphore 可以工作,而 ReentrantLock 却不能?

java - join(long millis) 在以下示例中如何工作?

c# - .Net中的Dictionary在并行读写时是否有可能导致死锁?

c - gcc优化的解释

安卓工作室断言错误: Don't invoke waitForSmartMode from inside read action in dumb mode