如何知道 java 进程等待了多少时间
How to know how many time is a java process awaiting
我正在开发一个有两个线程的 Java 应用程序:
- 一个生产者线程,以 10 KHz 的频率提供一个
ArrayBlockingQueue
(它实际上是一个通过 JNI 的 C 代码)。
- 一个消费者线程,使用
take
方法从队列中获取数据,然后对其进行处理(你不能假设处理时间总是相同的 ).由于我使用的是take
方法,如果队列中没有数据可用,这个线程会被阻塞。
我想知道如何监视或分析消费者线程以了解它等待或阻塞了多少时间。
我对 System.currentTimeMillis()
和求异等答案不感兴趣。我想知道如何分析整个线程的生命周期,并总结出每个线程状态有多少时间,如果可以的话。
你们是怎么做这种监控的?
提前致谢!
任何体面的 Java Profiler 都可以按线程分离统计信息,即使是 JDK 中包含的相当基本的 JVisualVM。这是 JVisualVM 自我观察的截图:
同样的信息也可以在table中显示:
我正在开发一个有两个线程的 Java 应用程序:
- 一个生产者线程,以 10 KHz 的频率提供一个
ArrayBlockingQueue
(它实际上是一个通过 JNI 的 C 代码)。 - 一个消费者线程,使用
take
方法从队列中获取数据,然后对其进行处理(你不能假设处理时间总是相同的 ).由于我使用的是take
方法,如果队列中没有数据可用,这个线程会被阻塞。
我想知道如何监视或分析消费者线程以了解它等待或阻塞了多少时间。
我对 System.currentTimeMillis()
和求异等答案不感兴趣。我想知道如何分析整个线程的生命周期,并总结出每个线程状态有多少时间,如果可以的话。
你们是怎么做这种监控的?
提前致谢!
任何体面的 Java Profiler 都可以按线程分离统计信息,即使是 JDK 中包含的相当基本的 JVisualVM。这是 JVisualVM 自我观察的截图:
同样的信息也可以在table中显示: