【问题标题】:How to see what my Java process is doing right now?如何查看我的 Java 进程现在正在做什么?
【发布时间】:2011-11-22 02:34:09
【问题描述】:

我有一个始终处于 100% CPU 的应用服务器进程。我所说的持续是指几个小时,甚至几天。

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

我如何获得这些信息?

【问题讨论】:

  • 如果您使用的是 Tomcat,我发现 PSI Probe 值得在每个 Tomcat 实例上部署。此外,您可以考虑在服务器上启用 JDWP 并附加调试器。

标签: java performance jvm monitor


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • @Konrad Garus:gkamal 完全正确。拿几个jstack 样本,它会告诉你它在做什么。这很简单。
    【解决方案3】:

    我个人为此使用YourKit

    VisualVM 也有一些 profiling 功能,但我没用过。

    【讨论】:

      【解决方案4】:

      在 linux 中尝试 kill -3 processid 它将生成线程转储。你可以分析一下,看看java进程到底发生了什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 2022-12-15
        相关资源
        最近更新 更多