2

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

 2 years ago
source link: https://zhang.ge/131.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

Jager · 12月18日 · 2013年linux · redhat · shell · web · 运维 2762次已读

写在前面:当一个台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代码:

#bin/bash
nid =`python -c "print hex($1)"` grep -i $nid $2

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK