用 AI 写运维脚本,导致服务器资源耗尽无法访问
很多新手用 AI 生成运维脚本时,省略了人工审查,一放上去就导致服务器 CPU 打满、内存耗尽、磁盘写爆,连 SSH 都连不上。
本文按实际故障处理顺序,从发现异常到恢复访问、再到后续预防,一步步拆解,即便你只有基本 Linux 常识也能跟着操作。
现象与前置准备
服务器突然响应缓慢或完全连不上,SSH 超时,或者面板(如宝塔)提示资源告警。
如果 SSH 能进最好,进不了就需要通过云厂商后台的 VNC 或者“救援模式”登录。
准备条件:
- 云服务器控制台(阿里云、腾讯云、华为云等)的登录权限,能使用 VNC 或救援模式。
- 如果是本地服务器,准备 KVM 或 IPMI 连接。
- 记住你的 SSH 用户密码或密钥,优先用 root 或 sudo 权限操作。
分步操作:紧急定位与恢复
1. 登录服务器(如果 SSH 失效就用 VNC)
从云控制台找到“远程连接”,选择 VNC(通常默认开启)。
输入用户名和密码登录。
2. 快速查看资源占用
用下面命令看 CPU 和内存前几名:
top -b -n 1 | head -20
如果 top 都卡死,直接看进程:
ps aux --sort=-%cpu | head -10
或者再粗暴点:
ps aux | awk '{print $2,$3,$4,$11}' | sort -k2 -rn | head -10
确认是哪个进程吃掉资源。
常见的是 Python、bash、Node.js 等 AI 脚本进程。
3. 杀掉异常进程
找到 PID 后,立刻终止:
kill -9 PID
如果该进程创建了大量子进程,可以按名称批量清理:
pkill -f 脚本名称关键字
比如:
pkill -f ai_script.py
清理后立即验证:
top -b -n 1 | head -5
CPU 和内存占用应该立刻下降。
4. 释放磁盘空间(如果日志写爆)
用 df -h 检查磁盘使用率。
如果被日志占满,进入相关目录清空:
cd /var/log
rm -f large_log_file.log
# 或者清空不删文件:
truncate -s 0 large_log_file.log
如果是 MySQL 等应用日志,确认服务状态后重启。
5. 重启服务(可选)
如果系统负载极高且 kill 后依然卡顿,重启服务器往往最直接:
reboot
重启后再次用 top、df -h、free -m 确认资源正常。
避坑指南:为什么 AI 脚本这么疯狂
- 死循环缺少 break:AI 生成的循环逻辑里没有退出条件或 sleep,一跑就占满单核。
- 无限 fork 子进程:脚本递归调用自身或批量启动子进程,瞬间打爆系统。
- 无限制写日志:用
print或logging但不设大小限制,填满磁盘。 - 未设置资源限制:缺少
ulimit限制 CPU 时间、内存、进程数。
运行 AI 脚本前的安全建议:
- 在测试环境先跑一次,用
timeout 30 python script.py控制最长执行时间。 - 使用 Docker 或虚拟机隔离运行,防止拖垮宿主机。
- 脚本开头加上资源限制:
ulimit -t 60 # CPU 时间 60 秒
ulimit -u 100 # 最大进程数 100
ulimit -f 10000 # 文件大小限制(单位块)
效果验证与后续预防
恢复访问后,再次执行:
top # CPU 空载<20%,内存使用平稳
free -m # 内存剩余充裕
df -h # 磁盘使用率正常(<85%)
如果能通过 SSH 连上并且网页正常访问,说明抢救成功。
后续预防措施:
- 在服务器上安装监控告警(如 Prometheus + Alertmanager 或者面板自带告警),CPU 超过90%持续10分钟即通知。
- 对 AI 生成的脚本建立审查清单:必须检查循环、IO 操作、资源限制。
- 使用
systemd-run --scope -p CPUQuota=50% ./ai-script.sh限制 CPU 配额。 - 考虑用
cgroups或容器运行不可控脚本。
如果你正在处理用AI写运维脚本导致服务器资源耗尽的情况,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。