`

如何调试JAVA进程CPU过高

    博客分类:
  • JAVA
阅读更多

       在日常开发中,会碰到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下相同

 

 

  • 大小: 102.8 KB
  • 大小: 9.9 KB
  • 大小: 7.9 KB
  • 大小: 129.6 KB
  • 大小: 176.2 KB
  • 大小: 86.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics