美文网首页
shell脚本抓取堆栈信息

shell脚本抓取堆栈信息

作者: 秦海波 | 来源:发表于2021-11-15 10:52 被阅读0次

由于服务器每周末特定时间出现CPU告警问题,出现时间比较短所以用脚本抓取信息

1、shell脚本

#!/bin/sh
#加载环境变量
. /etc/profile

Date2=`date`
Date=`date +%Y%m%d`
base="/root/scripts"
time=`date +%H:%M:%S`

getPidInfo(){
    #echo "监控开始"
  #获取一次top指令去掉前面6行,判断第9列(CPU占用)大于一定数据,按照CPU排序,然后取第一条
    data=$(top -b -d 1 -n 1 -u root |awk '{ if (NR > 6) print }' |awk '{ if ($9 > 10) print }' | sort -rn -k +9 | head -1)
    array=(${data// / })
    if [[ ${#array[@]} -gt 1 ]];
        then
    echo "当前时间为:$Date2" >> $base/overlog$Date.log
        echo "当前CPU使用率为:${array[8]}" >> $base/overlog$Date.log
    echo "当前内存使用率为:${array[9]}" >> $base/overlog$Date.log
        echo "当前用户为:${array[1]}" >> $base/overlog$Date.log
    echo "当前进程为:${array[0]}" >> $base/overlog$Date.log
        echo "当前进程名称为:${array[11]}" >> $base/overlog$Date.log
        echo "当前进程使用的CPU时间总计为:${array[10]}" >> $base/overlog$Date.log
    echo "进程所在目录为:" >> $base/overlog$Date.log
    ls -l  /proc/${array[0]}/cwd* >> $base/overlog$Date.log
    echo "进程类型为:" >> $base/overlog$Date.log
    ls -l  /proc/${array[0]}/exe* >> $base/overlog$Date.log

    echo "当前线程对应进程信息" >> $base/overlog$Date.log
    top -b -d 1 -n 1 -H -p ${array[0]} |awk '{ if (NR > 6) print }'| sort -rn -k +9 >> $base/overlog$Date.log
    echo "当前堆栈信息开始:==================================================" >> $base/overlog$Date.log
    jstack ${array[0]} >> $base/overlog$Date.log
    echo "当前堆栈信息结束:==================================================" >> $base/overlog$Date.log
    #else
       # echo "CPU占有率状态正常" >> $base/overlog$Date.log
    fi
}

#echo $time
#死循环执行到某个时间
until [[ "$time" > "10:33:00" ]]
do
    echo "当前时间:$time "  >> $base/overlog$Date.log
    getPidInfo
    sleep 1
    time=`date +%H:%M:%S`
    Date2=`date`
    #echo "当前实际时间为:$time"
done
echo "到时间了$time " >> $base/overlog$Date.log

#给脚本加入可执行权限
chmod +x time.sh

2、定时任务crontab -e

#输入命令
crontab -e
#进入编辑模式输入脚本加路径
31 10 * * 3 /root/scripts/time.sh

3、环境变量问题

前期执行手动调用没有问题但是定时执行无法抓取到堆栈信息,后再脚本前面加入. /etc/profile后解决

##脚本头部加入. /etc/profile加载环境变量
. /etc/profile

相关文章

网友评论

      本文标题:shell脚本抓取堆栈信息

      本文链接:https://www.haomeiwen.com/subject/hmzftrtx.html