CPU瞬时冲高自动监测打印进程栈信息和线程ID脚本

背景:

1.生产环境某个应用CPU偶发瞬时冲高情况,每次持续2-5分钟,运维人员来不及立马定位原因

2.pod应用,没有添加到集成监控系统中,需要自己想办法监测

3.pod应用中不让安装crontab工具

脚本内容如下:

#!/bin/bash

while [ true ]

do

cpu=$(top -bn 1| sed -n '3p'|awk '{print $2}')

echo "(date '+%Y%m%d%H%M%S'): 间隔10s检索CPU情况,CPU=cpu"

if [[ `expr $cpu \> 60` == 1 ]]; then

echo "cpu surge, find process, cpu=$cpu"

PACPU=($(top -bn 1|grep java| sed -n '1,5p'|awk '{print $1,$9}'))

echo "${PACPU[*]}"

len=${#PACPU[*]}

for ((i=0;i<$len;i+=2))

do

pid={PACPU\[i]}

tids=($(top -bn 1 -p $pid -H|sed -n '8,12p'|awk '{print $1}'))

cpu={PACPU\[i+1]}

file=pid-(date '+%Y%m%d%H%M%S').log

echo "print process pid, tids={tids[*]}, cpu=cpu, file=file"

for tid in ${tids[*]}

do

printf "nid=0x%x\n" $tid >> $file

done

jstack -l $pid >> $file

done

fi

sleep 10s

done

相关推荐
苹果酱05674 分钟前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
掐指一算乀缺钱24 分钟前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
TravisBytes29 分钟前
linux 系统是如何收发数据包
linux·运维·服务器
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑29 分钟前
苍穹外卖学习笔记(七)
java·windows·笔记·学习·mybatis
就这个java爽!35 分钟前
JAVA网络编程【基于TCP和UDP协议】超详细!!!
java·开发语言·网络·tcp/ip·udp·eclipse·idea
一叶飘零_sweeeet39 分钟前
为什么 Feign 要用 HTTP 而不是 RPC?
java·网络协议·http·spring cloud·rpc·feign
懒洋洋大魔王1 小时前
7.Java高级编程 多线程
java·开发语言·jvm
茶馆大橘1 小时前
【黑马点评】已解决java.lang.NullPointerException异常
java·开发语言
星辰@Sea1 小时前
服务注册中心对比及使用场景分析
java·云原生
马剑威(威哥爱编程)1 小时前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization