假设你的 Java 程序占用了100% 的 CPU。它有50根线。你得找出哪条线是有罪的。我还没找到有用的工具。目前,我使用以下非常耗时的例行程序:
jstack <pid>
,其中 pid 是 Java 进程的进程 id。找到它的简单方法是运行 JDK-jps
中包含的另一个实用程序。最好将 jstack 的输出重定向到一个文件。或者,您可以附加到 Eclipse 中的 Java 进程,并尝试一个接一个地挂起线程,直到遇到占用 CPU 的线程。在单 CPU 机器上,您可能需要首先降低 Java 进程的优先级,以便能够移动。即便如此,由于超时,Eclipse 通常也不能附加到正在运行的进程。
我希望 Sun 的 visualvm
工具可以做到这一点。
有人知道更好的办法吗?