广告图片
TOP云-靠谱的企业级公有云服务平台

云服务器、物理服务器、云安全、SSL证书限时3折抢购!

双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,

TOP云-靠谱的企业级公有云服务平台:双路E5-2640V4(40核)64G内存480G SSD硬盘30M独享带宽物理机仅需368元;香港铂金云服务器2H/2G/15M仅需19.8元/月;4H/4G/25M仅需29.8元/月,云服务器、物理服务器、云安全、SSL证书限时3折抢购!点击这里立即抢购! 展开广告

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异常,但从根本上减少异常发生,还需要稳定可靠的硬件支撑。对于核心业务,物理服务器凭借独享的物理核心与无虚拟化开销的优势,能够为业务提供更稳定、可预测的执行环境,从根本上降低因资源争抢导致的性能抖动。

👉 TOP云物理服务器特惠,CPU可选双路E5-2660(32核)、双路E5-2680v2(40核)、双路E5-2696/98 V4(88核)、双路Gold 6138(80核)、双路Platinum 8173(112核);内存从32G-128G可选,带宽有单线、多线独享20M-200M,价格低至368元。

产品亮点:

  • 高能低耗、多核超线程: 提供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小时的自动防护。而选择一台性能充沛、运行稳定的物理服务器,则是为这一切安全策略提供坚实硬件根基的关键一步,让每一次异常都能被快速发现、精准处置。

阿, 信