TOP云物理服务器特惠,CPU可选双路E5-2660(32核)、双路E5-2680v2(40核)、双路E5-2696/98 V4(88核)、双路Gold 6138(80核)、双路Platinum 8173(112核);
内存从32G-128G可选,带宽有单线、多线独享20M-200M,价格低至368元。
购买链接:https://c.topyun.vip/cart?fid=1&gid=236
云主机CPU异常进程自动杀掉脚本编写
在服务器运维中,CPU异常飙高是最常见的告警之一。无论是程序死循环、内存泄漏导致的进程失控,还是遭受恶意攻击,高CPU占用进程都可能拖垮整台服务器,影响其他业务正常运行。手动排查并杀掉进程不仅耗时,而且无法应对突发状况。通过编写自动化脚本,可以实现对CPU异常进程的实时监控与自动清理,显著提升运维效率。
一、脚本的核心设计思路
一个完善的CPU异常进程自动清理脚本,需要具备以下核心能力:
1. 实时监控CPU使用率
脚本需要周期性采集系统中各进程的CPU占用情况,并设定一个阈值(如80%或90%),当进程CPU使用率超过该阈值时触发后续动作。
2. 连续超阈值判定
为避免误杀瞬时峰值进程,脚本应设计计数机制:只有当进程连续多次超过阈值时,才执行终止操作。
3. 白名单保护机制
系统关键进程(如sshd、systemd、数据库进程等)必须纳入白名单,防止被误杀导致系统崩溃。
4. 日志记录
所有监控和杀进程操作应记录到日志文件中,便于事后审计和排查。
二、脚本实现方案
以下提供两种典型实现方案,可根据实际场景选择使用。
方案一:基于连续采样计数的自动清理脚本
该脚本适用于需要精确控制误杀风险的场景,通过连续N次采样均超过阈值才执行杀进程。
#!/bin/bash
# 配置参数
MAX_USAGE=80 # CPU使用率阈值(%)
SLEEP_TIME=3 # 采集间隔(秒)
COUNT_NUM=5 # 连续超过阈值的次数阈值
EXCLUDE_PID=(1 2) # 排除的系统进程PID列表
# 日志文件
LOG_FILE="/var/log/kill_cpu.log"
# 初始化变量
PID=0
COUNT=0
while true; do
# 获取当前CPU使用率最高的进程PID和使用率
TOP_INFO=$(top -b -n 1 | head -12 | tail -1)
NOW_PID=$(echo "$TOP_INFO" | awk '{print $1}')
NOW_CPU=$(echo "$TOP_INFO" | awk '{print $9}')
CMD=$(echo "$TOP_INFO" | awk '{print $12}')
# 检查是否超过阈值
if (( $(echo "$NOW_CPU > $MAX_USAGE" | bc -l) )); then
# 检查是否在白名单中
IS_EXCLUDE=0
for i in "${EXCLUDE_PID[@]}"; do
if [ "$NOW_PID" == "$i" ]; then
IS_EXCLUDE=1
break
fi
done
if [ "$IS_EXCLUDE" -eq 1 ]; then
continue
fi
# 连续计数
if [ "$NOW_PID" == "$PID" ]; then
COUNT=$((COUNT + 1))
else
PID=$NOW_PID
COUNT=0
fi
# 计数达到阈值,杀进程
if [ "$COUNT" -gt "$COUNT_NUM" ]; then
echo "$(date) - 杀死进程 PID: $PID, 命令: $CMD, CPU: $NOW_CPU%" >> "$LOG_FILE"
kill -9 "$PID"
PID=0
COUNT=0
fi
fi
sleep "$SLEEP_TIME"
done
方案二:基于cron定时任务的轻量级脚本
该方案通过cron定时执行,适合不需要持续驻留后台的场景。
#!/bin/bash
# killcpu.sh - 检测并杀掉CPU使用率超过80%的进程
# 使用方法:配合cron定时任务执行
CPU_THRESHOLD=80
LOG_FILE="/var/log/killcpu_cron.log"
# 获取CPU使用率超过阈值的进程列表
/bin/ps axf -o "pid %cpu" | awk '{if($2>=80) print $1}' | while read procid; do
# 获取进程名,排除白名单
PROC_NAME=$(ps -p "$procid" -o comm= 2>/dev/null)
if [ -z "$PROC_NAME" ]; then
continue
fi
# 白名单检查
case "$PROC_NAME" in
sshd|systemd|kthreadd|ksoftirqd|migration|watchdog)
echo "$(date) - 跳过白名单进程: $PROC_NAME (PID: $procid)" >> "$LOG_FILE"
continue
;;
esac
# 获取进程运行时间,避免误杀刚启动的进程
PROC_TIME=$(ps -p "$procid" -o etime= 2>/dev/null | tr -d ' ')
if [ -z "$PROC_TIME" ]; then
continue
fi
# 如果运行时间超过30秒,则杀进程
if [[ "$PROC_TIME" =~ [0-9]+:[0-9]+ ]] || [[ "$PROC_TIME" =~ [0-9]+-[0-9]+:[0-9]+ ]] || [[ "$PROC_TIME" =~ [0-9]+:[0-9]+:[0-9]+ ]]; then
echo "$(date) - 杀死进程 PID: $procid, 名称: $PROC_NAME, 运行时间: $PROC_TIME" >> "$LOG_FILE"
kill -9 "$procid"
fi
done
将上述脚本保存为 /root/killcpu.sh,赋予执行权限,并通过crontab设置定时任务:
# 每5分钟执行一次
*/5 * * * * /root/killcpu.sh
三、脚本部署与测试
1. 部署步骤
- 将脚本内容保存到服务器(如
/opt/scripts/kill_high_cpu.sh)。 - 赋予执行权限:
chmod +x /opt/scripts/kill_high_cpu.sh。 - 根据实际环境调整阈值参数和白名单列表。
2. 测试验证
- 使用
stress工具模拟高CPU负载:stress --cpu 1 --timeout 60。 - 观察脚本是否能正确识别并记录高CPU进程。
- 检查日志文件确认杀进程动作是否按预期触发。
3. 后台运行方案一脚本
nohup /opt/scripts/kill_high_cpu.sh > /var/log/killcpu_daemon.log 2>&1 &
四、注意事项与优化建议
1. 设置合理的阈值
阈值不宜设置过低,以免误杀正常业务进程。建议根据业务特点设定,一般CPU使用率阈值设置在80%-90%较为合理。
2. 完善白名单机制
务必将所有关键系统进程和核心业务进程加入白名单,避免误杀导致服务中断。白名单可以按进程名或PID进行匹配。
3. 优先使用SIGTERM
在脚本中先尝试使用 kill -15(SIGTERM)发送终止信号,允许进程进行清理操作。如果进程在指定时间内仍未退出,再使用 kill -9(SIGKILL)强制终止。
4. 日志与告警整合
将脚本的日志输出与监控系统(如Prometheus+Grafana)集成,或通过邮件、企业微信等渠道发送告警通知,以便及时了解异常情况。
5. 定期审计
定期检查脚本日志,分析被杀的进程是否属于正常业务,及时调整白名单和阈值设置。
五、高性价比物理服务器方案推荐
自动清理脚本能有效应对CPU异常,但从根本上减少异常发生,还需要稳定可靠的硬件支撑。对于核心业务,物理服务器凭借独享的物理核心与无虚拟化开销的优势,能够为业务提供更稳定、可预测的执行环境,从根本上降低因资源争抢导致的性能抖动。
产品亮点:
- 高能低耗、多核超线程: 提供Intel至强E5、金牌、铂金系列CPU,满足从计算密集型到高并发等多种业务需求。
- 灵活配置: 内存32G-128G,硬盘240G-1T SSD,带宽20M-500M,支持多线BGP,可根据业务需求灵活定制。
- 强大防御: 提供50G-600G的高防能力,有效抵御DDoS攻击,保障业务安全稳定。
- 超值价格: 月付仅需368元起,性价比极高,适合初创企业、个人站长及对成本敏感的项目。
配置方案速览:
- 基础版:E5-2698V4/金牌/铂金CPU,32G-128G内存,240G-1T SSD,30M-500M带宽,50G-500G防御,¥368 起/月。
- 进阶版:双路E5-2696V4/Gold 6138 CPU,32G-128G内存,240G-1T SSD,20M-500M多线BGP带宽,50G-600G防御,¥849 起/月。
- 旗舰版:双路E5-2650/2696V4/2680V4 CPU,32G-128G内存,240G-1T SSD,100M-500M多线BGP带宽,400G-600G防御,¥1899 起/月。
以上仅为部分配置示例,更多高性价比方案请点击链接查看详情。
总结
编写CPU异常进程自动杀掉脚本,是保障服务器稳定运行的重要手段。核心思路是:设定合理的CPU阈值,通过连续采样避免误杀,结合白名单保护关键进程,并记录完整日志以便追溯。将脚本与cron定时任务或后台守护进程结合,即可实现7×24小时的自动防护。而选择一台性能充沛、运行稳定的物理服务器,则是为这一切安全策略提供坚实硬件根基的关键一步,让每一次异常都能被快速发现、精准处置。




