Linux中使用Shell脚本查看Java线程的CPU使用情况
线上Java应用,在业务高峰期的时候经常出现CPU跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用CPU情况,结合jstack日志,排查到具体的线程类名。
一、首先获得jvm的进程ID:
ps-ef|grepjava tomcat 374 372 111:45? 00:02:30jsvc.exec-java-home/usr/java/latest-usertomcat-pidfile/usr/local/tomcat7/logs/tomcat7.pid-outfile/usr/local/tomcat7/logs/catalina-daemon.out-errfile&1-classpath/usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/commons-daemon.jar:/usr/local/tomcat7/bin/tomcat-juli.jar-Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties-Djava.awt.headless=true-Xmx10240m-XX:MaxPermSize=2096m-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djava.endorsed.dirs=/usr/local/tomcat7/endorsed-Dcatalina.base=/usr/local/tomcat7-Dcatalina.home=/usr/local/tomcat7-Djava.io.tmpdir=/usr/local/tomcat7/temporg.apache.catalina.startup.Bootstrap
如上,我们知道PID为374,切换使用tomcat用户登录
vijkiller.sh输入以下脚本:
#!/bin/sh
exportLANG="zh_CN.UTF-8"; exportLC_ALL="zh_CN.UTF-8";
LOG_FILE="/tmp/jkiller.log"; JSTACK_FILE="/tmp/jstack.log";
PID="$1"; shift; i=0; j="$1"; if[-z"${j}"];then j=5; fi
ps-mp${PID}-oTHREAD,tid,time|sort-rn>${LOG_FILE}; jstack${PID}>${JSTACK_FILE};
forLINEin`cat${LOG_FILE}|gawk-F'-''{print$4}'|gawk-F'''{print$1}'` do i=$(($i+1)); if(($i>$j));then break; fi; XPID=`printf"%x\n"${LINE}`; echo-ne"\033[32m"; echo${XPID}; echo-e"\033[34m"; grep-A10"0x${XPID}"${JSTACK_FILE}; echo-e"\e[0m"; done;
热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短