cpu占用超过一定值时及时dump jvm堆栈信息

背景:线上某个服务cpu偶发性报警,当上机器去查看时,可能已经恢复,抓不到现场,因此期望能够自动监控cpu,发现异常及时dump堆栈信息

方案:通过如下脚本临时搞一下

#!/bin/bash
program="xxxxxx.jar"
while((1))
do
    java_pid=$(ps aux|grep $program|grep -v grep|awk '{print $2}')
    cpu_idle=$(sar -u 1 5|grep Average|awk '{print $NF}')
    if [ $(echo "$cpu_idle < 10"|bc) -eq 1 ] ; then
        echo $cpu_idle > /tmp/$stack_file_name
        stack_file_name='stack_'$(date +%Y-%m-%d-%H-%M)
        top -Hp $java_pid -bn 1 | head -20 > /tmp/$stack_file_name
        jstack $java_pid >> /tmp/$stack_file_name
    fi
    sleep 30
done

 

posted on 2022-10-20 11:42  生活费  阅读(398)  评论(0编辑  收藏  举报

导航