抓取占用CPU高的JAVA线程,进而找出有问题的WEB页面

写在前面:当一个台WEB主机(JAVA平台)上有多个站点时,很可能因为一个站点项目出现死锁之类的BUG而导致所有站点挂掉!最烦的就是因为站点过多,在日志无法具体指向的时候,你根本无法确定那个站点出现BUG,从而你也没法推给开发人员解决。                    下面,就介绍一个抓取高占用CPU的线程的简单方法:

  1. 运行top命令取得JAVA线程号(PID),假如是2068;
  2. 运行jstack + pid 命令导出JAVA线程信息到result文件,命令行为
  3. jstack 2068>result
  4. 运行top -p 2068 -H 查看CPU占用排名情况,并记录PID;
  5. 运行 ./jtgrep +PID 找到线程头文字(PID为第3步获取) ;
  6. 使用vi/vim打开result,查询头文字就能找到相应线程。

下面为jtgrep代码:

 

写在后面:此方法无须安装任何软件,能够快速找出占用CPU的JAVA线程,是发现同类问题的首选办法,但很多时候你可能找到的是VM threads线程或者GC线程。。。无法真正找到毒瘤,那就只能另寻他法了。

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

加载中,请稍候...