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