zoukankan      html  css  js  c++  java
  • 用jstack自动化捕抓异常java代码脚本

    #!/bin/bash
    date=` date +%y%m%d-%H%M`
    pid=`top -bn1 |grep java | awk '{print $1 " " $9}' |head -1 | cut -f 1`
    pidCPU=`top -bn1 |grep java | awk '{print $1 " " $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 " >> $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 

  • 相关阅读:
    实现Maven自动下载源代码包并关联
    Maven3入门篇
    小典故:为什么数组的索引总是从0开始,而不是1?
    C语言算法探究之(一):算法的准确性
    C语言算法探究之(二):算法的准确性
    Visual Studio对无用引用(unused using)的处理方法
    C# CRC8的实现(原创)
    C#4.0:新功能和展望
    C#控件重绘学习(一)
    双加号(++)在C#中的用法解释
  • 原文地址:https://www.cnblogs.com/wudongyu/p/8657207.html
Copyright © 2011-2022 走看看