【问题标题】:How to know how many time is a java process awaiting如何知道一个java进程等待了多少时间
【发布时间】:2015-10-21 18:18:56
【问题描述】:

我正在开发一个有两个线程的 Java 应用程序:

  • 生产者线程以 10 KHz 的频率提供 ArrayBlockingQueue它实际上是通过 JNI 编写的 C 代码)。
  • 消费者线程从队列中获取数据,使用take 方法,然后处理它(你不能假设处理时间总是相同的)。由于我使用的是take方法,如果队列中没有可用的数据,这个线程会被阻塞。

我想知道如何监控或分析消费者线程以了解它等待或阻塞了多少时间。

我对诸如花时间与System.currentTimeMillis() 和接受差异之类的答案不感兴趣。如果可能的话,我想知道如何分析整个线程寿命并总结每个线程状态的时间。

您如何进行这种监控?

提前致谢!

【问题讨论】:

  • 我已经知道那篇文章,但我不知道如何获得该统计数据(我在文章中没有看到如何),也许这很容易,但是我不知道该怎么做,所以,你能告诉我怎么做吗?这是我的问题。

标签: java multithreading monitoring


【解决方案1】:

任何体面的 Java Profiler 都可以按线程分离统计信息,即使是 JDK 中包含的相当基本的 JVisualVM。下面是 JVisualVM 观察自身的截图:

同样的信息也可以在表格中显示:

【讨论】:

  • 非常感谢,确实很简单,但我从来没有意识到标签包含我正在寻找的统计数据。
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 2022-10-08
  • 2011-09-10
相关资源
最近更新 更多