如何查看我的Java进程现在正在做什么?

时间:2011-09-21 15:59:58

标签: java performance jvm monitor

我的应用服务器进程始终处于100%CPU状态。通常我指的是几小时甚至几天。

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

如何获取此信息?

4 个答案:

答案 0 :(得分:4)

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

高级商业版(可提供试用许可证)为YourKit

答案 1 :(得分:4)

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

答案 2 :(得分:2)

我个人使用YourKit

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

答案 3 :(得分:0)

在linux下尝试kill -3 processid它会生成线程转储。您可以对此进行分析以查看java进程中发生的情况。