如何调试JAVA进程CPU过高

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

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

       解决方法:

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

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

           
如何调试JAVA进程CPU过高_第1张图片
 

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

           

 

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

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



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

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

     
如何调试JAVA进程CPU过高_第2张图片
 将记录的高CPU的线程ID与线程堆栈信息的nid进程比较,找到具体是哪个线程耗费的CPU,并最终定位到具体是哪块代码耗费的CPU,jstack命令产生线程堆栈信息的nid为16进制

 

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

如下图所示:


如何调试JAVA进程CPU过高_第3张图片
 左边是进程列表,双击以后就可以对查看该进程的详细信息如下图:


如何调试JAVA进程CPU过高_第4张图片
 剩下的步骤跟linux下相同

 

 

你可能感兴趣的:(java,cpu高)