查看java线程cpu占用情况的脚本

时间:2023-01-02 16:48:38
#!/bin/bash

[ $# -ne  ] && exit 

jstack $ >/tmp/jstack.log

for cpu_tid in `ps -mp $ -o THREAD,tid,time|sort -k2nr| sed -n '2,15p' |awk '{print$2"_"$(NF-1)}'`;do

cpu=`echo $cpu_tid | cut -d_ -f1`

tid=`echo $cpu_tid | cut -d_ -f2`

xtid=`printf "%x\n" $tid`

echo -e "\033[31m========================$xtid $cpu%\033[0m"

cat /tmp/jstack.log | sed -n -e "/0x$xtid/,/^$/ p"

#cat /tmp/jstack.log | grep "$xtid" -A15

done

rm /tmp/jstack.log
 

下面这个是新脚本

#!/bin/bash
[ $# -ne ] && exit
jstack $ >/tmp/jstack.log
top -H -p $ -b -n1 | grep PID -A10 | grep -v PID | awk '{print$1,$9}' >/tmp/topH.log
cat /tmp/topH.log | while read tid cpu;do
xtid=`printf "%x\n" $tid`
echo -e "\033[31m========================$xtid $cpu%\033[0m"
cat /tmp/jstack.log | sed -n -e "/0x$xtid/,/^$/ p"
done

.echo 具有给输出的字符加颜色的功能,格式如下:

格式: echo -e "\033[字背景颜色;字体颜色;ANSI控制码m字符串\033[0m"

-e选项是让echo能够识别转义字符,否则不能显示颜色,先上个格式相关的例子

例1:

echo -e "\033[41;36m something here \033[0m"

或者:echo -e "\033[36;41m something here \033[0m"

输出结果一样:

查看java线程cpu占用情况的脚本

其中41的位置代表底色为红色, 36的位置是代表字的颜色为深绿色(在底色为红色下看不出来),41和36的位置交换也没有关系。

例2:

或者:echo -e "\033[41;36;1m something here \033[0m"

或者:echo -e "\033[36;41;1m something here \033[0m"

输出结果:

查看java线程cpu占用情况的脚本

该格式加了“1m”参数,表示“设置高亮度”,从图中可以看出亮度不同,例1和例2格式的结尾都有“0m”,表示“关闭所有属性”,如果不设置0m,那么接下来的输出都会延续上个输出属性。

2.参数及对应的颜色

字背景颜色 字颜色 ANSI控制码的说明
40:黑 
41:深红 
42:绿 
43:黄色 
44:蓝色 
45:紫色 
46:深绿 
47:白色 
30:黑 
31:红 
32:绿 
33:黄 
34:蓝色 
35:紫色 
36:深绿 
37:白色 
033[0m 关闭所有属性 
\033[1m 设置高亮度 
\033[4m 下划线 
\033[5m 闪烁 
\033[7m 反显 
\033[8m 消隐 
\033[30m -- \33[37m 设置前景色 
\033[40m -- \33[47m 设置背景色 
\033[nA 光标上移n行 
\033[nB 光标下移n行 
\033[nC 光标右移n行 
\033[nD 光标左移n行 
\033[y;xH设置光标位置 
\033[2J 清屏 
\033[K 清除从光标到行尾的内容 
\033[s 保存光标位置 
\033[u 恢复光标位置 
\033[?25l 隐藏光标 
\033[?25h 显示光标