jstack 脚本 自动日志_用jstack自动化捕抓异常java代码脚本

这是一个使用bash脚本自动捕获Java进程异常的示例。脚本首先获取Java进程ID及其CPU使用率,然后通过jstack生成堆栈跟踪日志,并找出高CPU使用率的线程。它会输出线程ID、CPU负载以及相应的堆栈跟踪信息,帮助诊断性能问题。
摘要由CSDN通过智能技术生成

#!/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 是一个判断表达式,用于判断$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可以列出本机所有java进程的pid,cut -d只切割pid这一列。

then

echo "process of $pid is not exists" #查找我们要找的进程是否存在

exit

fi

#line number

if test -z $linenum #判断linenum是否为空字符串,来定义打印多少行

then

linenum=10

fi

stackfile=stack$pid.dump #查异常代码文件

threadsfile=threads$pid.dump #线程id

# generate java stack

$JAVA_HOME/bin/jstack -l $pid >> $stackfile #用jstack把异常代码输入到参数文件$pidpid.dump里面去

ps -mp $pid -o THREAD,tid,time | sort -k2r | awk '{if ($1 !="USER" && $2 != "0.0" && $8 !="-" && $9) print "线程号:"$8 "; CPU负载:" $2;}' >threadsfile.txt #查找出满足第一列是>否为USER&&第二列是否为空值&&第八列是否为-的话就输出第八列的pid保存到threadsfile.txt文件内

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命令是在当前用户下>,列出pid包含的所有线程,本地id,时间,sort 的选项k2是指定第2排序的栏位,r是倒序排列,{if ($1 !="USER" && $2 != "0.0" && $8 !="-") print $8;}是满足第一列是否为USER&&第二列是否为>空值&&第八列是否为-的话就输出第八列的pid,然后打印出来并转成16进制输出到threads$pid.dump文件

tids="$(cat $threadsfile)" #设置tids变量为threads$pid.dump文件

for tid in $tids #然后循环打印出来我们要找的异常代码

do

echo "------------------------------ ThreadId (进程号为:$pid;CPU线程号十六进制为:$tid;) ------------------------------"

cat $stackfile | grep 0x$tid -A $linenum

done

参考 http://www.javatang.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值