cpu负载排查
AI-摘要
KunKunYu GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
1.1 cpu负载过高java进程
cat > java_cpu_check.sh << 'EOF'
!/bin/bash
##检测是否安装iostat工具
##stress --cpu 4 --timeout 60 通常使用stress压测cpu触发脚本是否执行成功
##判断目录是否存在
# 定义目录路径
dir_logs=/data/script/logs
# Java进程的关键词,可以根据实际情况修改
keyword=".jar"
# 循环执行次数
num_iterations=3
# 循环间隔时间(秒)
sleep_time=5
# 定义cpu5分钟的告警触发阀值数值:Load average:5分钟超过3 则执行以下采集命令
threshold=3
# 判断目录是否存在
if [ -d "$dir_logs" ]; then
echo "目录已存在,无需创建。"
else
echo "目录不存在,创建目录:$dir_logs"
sudo mkdir -p $dir_logs && sudo chown -R admin.admin $dir_logs
fi
# 获取5分钟平均负载
load=$(uptime | awk '{print $(NF-2)}' | cut -f1 -d',')
echo "5分钟平均负载: $load"
echo "开始执行cpu负载判断"
if (( $(echo "$load > $threshold" | bc -l) )); then
# 获取所有符合关键词的Java进程PID和服务名称,并循环执行jmap、jstack和jstat命令
for ((i=1;i<=$num_iterations;i++)); do
echo "Iteration $i:"
# 获取所有符合关键词的Java进程PID和服务名称
pids=$(jps | grep "$keyword" | awk '{print $1}')
names=$(jps | grep "$keyword" | awk '{print $2}')
# 定义日志文件
java_logs="${dir_logs}/jmap_jstack_jstat_${name}_${pid}.txt"
echo "开始遍历循环执行jmap、jstack和jstat命令"
for pid in $pids; do
# 获取服务名称
name=$(echo "$names" | sed -n "$(echo "$pids" | grep -n $pid | cut -d':' -f1)p")
# 执行jmap命令
echo "$(date) Running jmap -heap $pid">> $java_logs
jmap -heap $pid >> $java_logs
# 执行jstack命令
echo "$(date) Running jstack -l $pid">> $java_logs
jstack -l $pid >> $java_logs
# 执行jstat命令
echo "$(date) Running jstat -gcutil $pid">> $java_logs
jstat -gcutil $pid >> $java_logs
done
# 休眠指定时间
sleep $sleep_time
done
else
echo "$(date) 负载未超过1,无需执行"
fi
EOF
1.2 cpu抓取
cat > cpu_check.sh << 'EOF'
#!/bin/bash
##检测是否安装iostat工具
##stress --cpu 4 --timeout 60 通常使用stress压测cpu触发脚本是否执行成功
##判断目录是否存在
# 定义目录路径
dir_logs=/data/script/logs
# 定义cpu5分钟的告警触发阀值数值:Load average:5分钟超过3 则执行以下采集命令
threshold=3
# 判断目录是否存在
if [ -d "$dir_logs" ]; then
echo "目录已存在,无需创建。"
else
echo "目录不存在,创建目录:$dir_logs"
sudo mkdir -p $dir_logs
fi
##判断命令是否存在
if ! command -v iostat &> /dev/null
then
echo "iostat command not found, installing..."
sudo yum install -y sysstat
fi
if ! command -v iotop &> /dev/null
then
echo "iostat command not found, installing..."
sudo yum install -y iotop
fi
#5分钟负载大于XX则触发分析命令并存储
logs_file="${dir_logs}/cpu-$(date +"%Y-%m-%d_%H:%M:%S").logs"
uptime | awk -F 'load average: ' '{print $2}' | awk -F ', ' '{print $2}' | while read load; do
if (( $(echo "$load > ${threshold}" | bc -l) )); then
echo "故障" >> ${logs_file}
echo "以下是详细信息:" >> ${logs_file}
echo "1 内核产生的信息:dmesg | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head -n 10" >> ${logs_file}
dmesg | awk -F: '{print $1}' | sort | uniq -c | sort -rn | head -n 10 >> ${logs_file}
echo "3 CPU每个计算核心的使用情况: mpstat -P ALL 5 2" >> ${logs_file}
mpstat -P ALL 5 2 >> ${logs_file}
echo "4 cpu利用率分析: sar -u 2 10" >> ${logs_file}
sar -u 2 10 >> ${logs_file}
echo "4 cpu的io进程: iotop -oP" >> ${logs_file}
iotop -oP >> ${logs_file}
echo "5 磁盘信息:iostat -x 1 3" >> ${logs_file}
iostat -x 1 3 >> ${logs_file}
echo "6 系统负载统计:vmstat 5 10" >> ${logs_file}
vmstat 5 10 >> ${logs_file}
echo "7 进程信息:ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 11" >> ${logs_file}
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 11 >> ${logs_file}
echo "2 进程数统计: ss -s" >> ${logs_file}
ss -s >> ${logs_file}
echo "8 监控进程:pidstat 2 2" >> ${logs_file}
pidstat 2 2 >> ${logs_file}
fi
done
EOF
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
作者编辑不易,如有转载请注明出处。完整转载来自https://wangairui.com 网站名称:猫扑linux
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果