对系统应用的监控思路以及重启方案
目录
前言
由于项目运行老旧,存在诸多历史原因,我们使用的某个系统服务器经常出现CPU使用率过高,线程堆积等情况,又因为该服务器的源码不受我们维护,我们只是使用,所以需要频繁的人为维护,非常麻烦,于是就有了以下的解决方案。
通过CPU监控应用状态,并且定时重启脚本
由于此前多次监控系统崩溃时的情况,发现系统濒临崩溃时CPU占用率会持续保持较高标准,于是决定监控CPU的占用率,并且基于此情况重启
#!/bin/bash
# 设置要监视的进程名
process_name="java"
# 设置CPU使用率阈值
cpu_threshold=60
# 设置重启计数器阈值
restart_threshold=10
# 初始化重启计数器
restart_counter=0
while true
do
# 获取要监视的进程的进程ID
pid=$(ps -ef | grep "$process_name" | grep -v grep | awk '{print $2}')
# 获取进程的当前CPU使用情况
cpu=$(top -b -n 1 -p "$pid" | awk 'NR>7 { sum += $9; } END { print sum; }')
# 检查CPU使用率是否超过阈值
if (( $(echo "$cpu > $cpu_threshold" | bc -l) )); then
restart_counter=$((restart_counter+1))
echo "$process_name 的CPU使用率超过了$cpu_threshold%。已进行第$restart_counter次重启计数。当前CPU使用了为:$cpu "
if [ $restart_counter -ge $restart_threshold ]; then
echo "线程Id:$pid 连续$restart_threshold次检测到CPU使用率超过$cpu_threshold%。当前CPU使用了为:$cpu 正在重启..."
##要是不担心数据丢失,可以使用该方案
kill -9 "$pid"
sleep 5
# 这里可以用你启动Java进程的命令替换以下命令
sh startup.sh &
##较为柔和一点的方式则重启tomcat服务器,这样可以让服务器运行完正在运行的进程
sudo service tomcat restart
restart_counter=0
fi
else
echo "线程Id:$pid $process_name 的CPU使用率低于$cpu_threshold%。重启计数器已重置。当前CPU使用为: $cpu"
restart_counter=0
fi
# 等待1分钟后再次检查
sleep 60
done