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