小编Gen*_*rib的帖子

哪个Java线程占用了CPU?

假设你的Java程序占用了100%的CPU.它有50个线程.你需要找到哪个线程是有罪的.我还没有找到可以提供帮助的工具.目前我使用以下非常耗时的例行程序:

  1. 运行jstack <pid>,其中pid是Java进程的进程ID.找到它的简单方法是运行JDK中包含的另一个实用程序 - jps.最好将jstack的输出重定向到文件.
  2. 搜索"可运行"线程.跳过那些在套接字上等待的东西(由于某种原因它们仍然标记为可运行).
  3. 重复步骤1和2几次,看看是否可以找到一个模式.

或者,您可以附加到Eclipse中的Java进程并尝试逐个挂起线程,直到您遇到占用CPU的那个.在单CPU机器上,您可能需要首先降低Java进程的优先级才能移动.即便如此,由于超时,Eclipse通常无法附加到正在运行的进程.

我本来期望Sun的visualvm工具可以做到这一点.

有人知道更好的方法吗?

java cpu multithreading

58
推荐指数
5
解决办法
6万
查看次数

标签 统计

cpu ×1

java ×1

multithreading ×1