2011-09-21 35 views
3

我有一个应用程序服务器进程,不断在100%的CPU。我一直都是指数小时甚至数天。如何查看我的Java进程正在执行的操作?

我知道如何生成堆/线程转储,但我在寻找更多的动态信息。我想知道这里有多少CPU。有几十(或可能是100+)线程。我知道那些线程是什么,但我需要知道他们中的哪些人正在使用我的CPU。

我该如何获取这些信息?

+0

如果您使用的是Tomcat,我发现[PSI Probe](http://code.google.com/p/psi-probe/)值得在每个Tomcat实例上部署。另外,您可以考虑在服务器上启用JDWP并附加一个调试器。 –

回答

4

使用分析器。有一个包含在Oracle JDK附带的VisualVM中。

一个先进的商业(试用许可证)是YourKit

2

我个人使用YourKit为此。

VisualVM也有一些分析功能,但我没有使用它们。

4

通过创建线程转储。您可以使用jstack连接到正在运行的java进程以获取线程转储。如果您在一段时间内进行了两次或多次线程转储,则可以通过分析它们确定哪些正在使用CPU。通常处于RUNNING状态的线程是您需要关注的线程。

+0

@Konrad Garus:gkamal是完全正确的。拿几个'jstack'样本,它会告诉你它在做什么。这很简单。 –

0

在linux中试试kill -3 processid它会生成线程转储。你可以分析这个来看看java进程中发生了什么。

相关问题