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

#!/bin/bash
 
[ $# -ne 1 ] && exit 1
 
jstack $1 >/tmp/jstack.log
 
for cpu_tid in `ps -mp $1 -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 1 ] && exit 1
jstack $1 >/tmp/jstack.log
top -H -p $1 -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"

输出结果一样:

 

其中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"

输出结果:

该格式加了“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 显示光标
posted @ 2017-02-23 16:54  苍穹冰尘  阅读(1746)  评论(0编辑  收藏  举报
Live2D