jstack 脚本 自动日志_用jstack自动化捕抓异常java代码脚本
#!/bin/bash
date=` date +%y%m%d-%H%M`
pid=`top -bn1 |grep java | awk '{print $1 "\t" $9}' |head -1 | cut -f 1`
pidCPU=`top -bn1 |grep java | awk '{print $1 "\t" $9}' |head -1 | cut -f 2`
# java home
if test -z $JAVA_HOME #est -z $JAVA_HOME 是一個(gè)判斷表達(dá)式,用于判斷$JAVA_HOME的值是否為空字符串
then
JAVA_HOME='/data/services/jdk1.7.0_79/'
fi
# checking pid
if test -z "$($JAVA_HOME/bin/jps -l | cut -d '' -f 1 | grep $pid)" #jps -l可以列出本機(jī)所有java進(jìn)程的pid,cut -d只切割pid這一列。
then
echo "process of $pid is not exists" #查找我們要找的進(jìn)程是否存在
exit
fi
#line number
if test -z $linenum #判斷l(xiāng)inenum是否為空字符串,來定義打印多少行
then
linenum=10
fi
stackfile=stack$pid.dump #查異常代碼文件
threadsfile=threads$pid.dump #線程id
# generate java stack
$JAVA_HOME/bin/jstack -l $pid >> $stackfile #用jstack把異常代碼輸入到參數(shù)文件$pidpid.dump里面去
ps -mp $pid -o THREAD,tid,time | sort -k2r | awk '{if ($1 !="USER" && $2 != "0.0" && $8 !="-" && $9) print "線程號(hào):"$8 "; CPU負(fù)載:" $2;}' >threadsfile.txt #查找出滿足第一列是>否為USER&&第二列是否為空值&&第八列是否為-的話就輸出第八列的pid保存到threadsfile.txt文件內(nèi)
ps -mp $pid -o THREAD,tid,time | sort -k2r | awk '{if ($1 !="USER" && $2 != "0.0" && $8 !="-" && $9) print $8;}' | xargs printf "%x\n" >> $threadsfile #ps -mp命令是在當(dāng)前用戶下>,列出pid包含的所有線程,本地id,時(shí)間,sort 的選項(xiàng)k2是指定第2排序的欄位,r是倒序排列,{if ($1 !="USER" && $2 != "0.0" && $8 !="-") print $8;}是滿足第一列是否為USER&&第二列是否為>空值&&第八列是否為-的話就輸出第八列的pid,然后打印出來并轉(zhuǎn)成16進(jìn)制輸出到threads$pid.dump文件
tids="$(cat $threadsfile)" #設(shè)置tids變量為threads$pid.dump文件
for tid in $tids #然后循環(huán)打印出來我們要找的異常代碼
do
echo "------------------------------ ThreadId (進(jìn)程號(hào)為:$pid;CPU線程號(hào)十六進(jìn)制為:$tid;) ------------------------------"
cat $stackfile | grep 0x$tid -A $linenum
done
參考 http://www.javatang.com
總結(jié)
以上是生活随笔為你收集整理的jstack 脚本 自动日志_用jstack自动化捕抓异常java代码脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux沙箱隔离_Linux沙箱技术介
- 下一篇: 蒸发器分段设计matlab程序_制冷系统