Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试Java进程上的高CPU使用率,而不是由Java线程引起的_Java_Linux_Debugging_Tomcat_Cpu Usage - Fatal编程技术网

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

如何调试Java进程上的高CPU使用率,而不是由Java线程引起的,java,linux,debugging,tomcat,cpu-usage,Java,Linux,Debugging,Tomcat,Cpu Usage,我有一个Java应用程序,它在Linux上的Tomcat上运行。运行数周后,它开始占用接近100%的CPU,如“top”命令所示,但没有一个Java线程占用超过5%的CPU;在0.2-0.5%之间也不是内核CPU。那么还有别的本地代码吗?JVM本身?导致CPU使用率如此之高。这个问题只能通过重新启动Tomcat来解决 所以问题是:如果不是Java线程,有没有办法找出导致CPU使用率如此高的原因?有没有一种方法可以查看Java进程内部运行的本机库。或者在这种情况下,我的调试策略应该是什么 版本:L

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

所以问题是:如果不是Java线程,有没有办法找出导致CPU使用率如此高的原因?有没有一种方法可以查看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消耗。这里有一个帖子的链接解释了这一点:

当时创建了多少线程?内存使用情况如何?也许您有很多漏洞,垃圾收集器试图跟上?该Java进程中有179个线程当您说没有一个Java线程占用超过5%的CPU时,您的意思是每个线程占用不超过5%的CPU吗?因为如果是这样的话,你可以有179个线程,每个线程占5%,这很容易超过100%的CPU…@endriu_l:我希望GC线程占用一些重要的CPU?但他们没有。好主意,我会检查一下。