如何在 Java 进程上调试高 CPU 使用率,而不是由 Java 线程引起的



我有一个在 Linux 上的 Tomcat 上运行的 Java 应用程序。运行几周后,它开始占用接近 100% 的 CPU(如"top"命令所示),但没有一个 Java 线程占用超过 5% 的 CPU;它也不是内核CPU(那个在0.2-0.5%之间)。所以别的东西(原生代码?JVM本身?导致此高 CPU 使用率。这个问题只能通过重新启动Tomcat来解决。

所以问题是:有没有办法找出导致这种高 CPU 使用率的原因,如果不是 Java 线程?有没有办法"查看"在 Java 进程中运行的本机库。或者在这种情况下,我的调试策略应该是什么?

版本: Linux 2.6 (CentOS), Apache Tomcat/6.0.33, JVM: Sun 1.6.0_29-b11.该应用程序恰好是Forgerock OpenAM 10.0(我也在检查已知问题,但到目前为止还没有找到确切的匹配,因此正在寻找更通用的建议)

这似乎很久没有答案了。调查 Java 进程的 CPU 是基于分析 jvm 进程的每个 pthread 的 CPU 消耗。这是解释这一点的帖子的链接:http://www.learnings.today/investigating-cpu-usage-in-a-java-process/

最新更新