如何调试JAVA进程CPU过高

       在日常开发中,会碰到java版本的CPU很高,大部分时候会耗尽CPU资源,作者就碰到好几次,这里贴一下我的问题发现的过程。

        作者第一次碰到是在linux系统下,代码进行过重构以后,每次运行,JAVA总是会耗尽CPU。linux系统为64位版本centos系统。

       解决方法:

       1、找到具体是哪个JAVA进程耗费的CPU资源,然后再定位到是进程中的哪些线程耗费CPU

           这个可以使用linux下的命令 top,按照CPU资源进行排序,找到对应的进程PID。

           

 

          使用JAVA jps命令找到该ID对应的java进程,知道是哪个JAVA进程耗费的CPU。

           

 

        2、打印该JAVA进程的线程队列

         使用jstack命令打印当前进程的线程堆栈调用信息



        3、使用它top带 H 命令按照线程占用CPU情况进行展示,记录CPU很高的线程PID

        根据步骤2打印的jstack线程堆栈的调用信息,如下图:

     

 将记录的高CPU的线程ID与线程堆栈信息的nid进程比较,找到具体是哪个线程耗费的CPU,并最终定位到具体是哪块代码耗费的CPU,jstack命令产生线程堆栈信息的nid为16进制

windows环境下则较为复杂,是因为windows环境下没有类top命令,需要软件进程支持,读者可以下载windows自己的process explorer软件来查看具体是哪个线程耗费CPU。

如下图所示:



 左边是进程列表,双击以后就可以对查看该进程的详细信息如下图:



 剩下的步骤跟linux下相同

猜你喜欢

转载自fengfu222.iteye.com/blog/2165898