当前位置: 移动技术网 > 网络运营>服务器>Linux > Linux中使用Shell脚本查看Java线程的CPU使用情况

Linux中使用Shell脚本查看Java线程的CPU使用情况

2017年12月12日  | 移动技术网网络运营  | 我要评论
线上java应用,在业务高峰期的时候经常出现cpu跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用cpu情况,结合jstack日志

线上java应用,在业务高峰期的时候经常出现cpu跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用cpu情况,结合jstack日志,排查到具体的线程类名。

一、首先获得jvm的进程id:

复制代码 代码如下:

ps -ef|grep java
tomcat     374   372  1 11:45 ?        00:02:30 jsvc.exec -java-home /usr/java/latest -user tomcat -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/temp org.apache.catalina.startup.bootstrap


如上,我们知道pid为374,切换使用tomcat用户登录
vi jkiller.sh 输入以下脚本:
复制代码 代码如下:

#!/bin/sh

export lang="zh_cn.utf-8";
export lc_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} -o thread,tid,time | sort -rn > ${log_file};
jstack ${pid} > ${jstack_file};

for line in `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 -a 10 "0x${xpid}" ${jstack_file};
    echo -e "\e[0m";
done;

执行该脚本:

复制代码 代码如下:
./jkiller.sh 374

该脚本将生成一个/tmp/jkiller.log 文件,里面为各个线程的cpu使用情况,里面带有tid,为线程id,可以结合/tmp/jstack.log 文件,查看具体是某个线程.

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网