1. 首页 > 技术教程 > 正文

AI Agent 服务崩了怎么办?自监控、重启策略和故障恢复流程

AI Agent 部署在 VPS 上,最怕半夜收到服务不可达的报警。不管是跑 Ollama 本地大模型,还是用 n8n 跑自动化工作流,服务崩了是常有的事。主机选经常遇到开发者问,为什么 Agent 跑着跑着就挂了,怎么才能自动恢复?这就需要一套完整的监控、重启和故障恢复机制,不能只靠人工盯着屏幕。

zhujixuan TASK 275

AI Agent 服务崩溃原因与日志排查

服务挂了别急着重启系统,先搞清楚“死因”。AI 类应用常见的崩溃原因通常集中在资源耗尽和外部 API 超时上。

内存溢出(OOM)与资源限制

跑本地模型(如 Llama 3 或 Mistral)对内存要求极高。如果 VPS 内存不足,Linux 的 OOM Killer 会直接杀掉进程,导致 Docker 容器瞬间消失。即使是调用 API 的 Agent(如 Claude Code),如果处理的数据量过大,Python 或 Node.js 进程也可能因为内存飙升而被系统终止。

查看 Docker 容器日志

定位问题最快的方法是看日志。不要只看控制台输出,要深入查看 Docker 的标准输出。

docker logs –tail 100 container_name

docker logs -f container_name

如果看到 `CUDA out of memory`,说明显存或内存不够;如果是 `Connection timeout`,多半是网络或 API Key 的问题。日志里如果出现 `Traceback` 或 `Exception`,那就是代码逻辑报错,容器可能退出了。

Docker 部署 AI Agent 的重启策略

对于 VPS 上的 AI 服务,不能指望进程一直不死,要指望它“死了能立刻复活”。Docker 的重启策略是第一道防线。

配置 Restart Policy

在创建容器时,必须带上重启参数。对于 AI Agent 这种长期运行的服务,推荐使用 `unless-stopped`。

docker run -d \
–name my-ai-agent \
–restart unless-stopped \
your-image-name

`unless-stopped` 的意思是:除非你手动停止容器,否则无论它怎么退出(崩溃、报错、Docker 守护进程重启),Docker 都会自动拉起它。这比 `always` 更友好,方便你维护时暂时停机。

更新现有容器的重启策略

如果你之前创建容器时忘了加重启策略,不用删掉重建,直接用 `update` 命令修改。

docker update –restart unless-stopped container_name

改完之后,可以手动杀掉进程测试一下:`docker kill container_name`,几秒钟后看它是否自动起来。

构建自监控与故障自愈脚本

Docker 重启策略只能解决进程退出的问题。如果 Agent 进程还在,但假死了(比如 Web 界面打不开,API 无响应),Docker 是察觉不到的。这时候需要额外的监控脚本。

编写简单的健康检查脚本

写一个 Shell 脚本,定期 curl 服务接口。如果返回码不是 200,就强制重启容器。

#!/bin/bash
CONTAINER_NAME="n8n"
PORT="5678"

STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$5678/healthz)

if [ "$STATUS" != "200" ]; then
echo "Service down, restarting $CONTAINER_NAME…"
docker restart "$CONTAINER_NAME"
else
echo "Service is running."
fi

将这个脚本保存为 `check_ai_agent.sh`,利用 `cron` 定时任务每 5 分钟跑一次。

crontab -e

*/5 * * * * /bin/bash /root/scripts/check_ai_agent.sh >> /var/log/ai_monitor.log 2>&1

配置 Systemd 守护进程

如果不用 Docker,直接用 Python 或 Node.js 跑 Agent,建议使用 Systemd 管理。它在服务崩溃时能自动拉起,还能配置日志轮转,防止日志文件占满硬盘。

创建 `/etc/systemd/system/ai-agent.service`:

ini
[Unit]
Description=AI Agent Service
After=network.target

[Service]
User=your_user
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/node /path/to/your/app/index.js
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

运行 `systemctl daemon-reload` 和 `systemctl enable –now ai-agent` 即可生效。

老鸟叮嘱

部署 AI Agent 时,有几个坑是新手必踩的。不要用 root 用户跑 Docker 容器,如果容器被攻破,攻击者直接拿宿主机权限。API Key 别硬编码在 Dockerfile 里,用环境变量或 Docker Secrets 传入,否则 `docker inspect` 就能泄露你的密钥。监控日志文件大小,AI Agent 运行日志增长极快,建议配置 Docker 的 log-driver 或者用 logrotate,防止 VPS 硬盘被写满导致系统崩溃。

FAQ

Q1: AI Agent 频繁重启,一直处于 Restarting 状态怎么办?
A: 这通常是启动失败。查看 `docker logs container_name`,大概率是配置文件错误、端口被占用或者 API Key 无效。先解决启动报错,容器才能稳定运行。

Q2: Ollama 跑大模型经常闪退,是 VPS 配置不够吗?
A: 很大可能是内存不足。检查 `dmesg | grep -i kill`,如果有 Out of memory 记录,就是 OOM Killer 杀了进程。建议开启 Swap 分区,或者换更小参数量的模型。

Q3: Docker 容器自动重启会丢失数据吗?
A: 只要数据是通过 `-v` 挂载到宿主机或者 Docker Volume 的,容器重启不会丢失数据。但如果没有挂载卷,容器内部生成的文件(如 n8n 的 SQLite 数据库)在容器重建时会丢失。

Q4: 怎么知道服务是真的挂了还是网络不通?
A: 在 VPS 本地执行 `curl http://localhost:端口`。如果本地能通,外网不通,那是防火墙或安全组没放行端口;如果本地也不通,那就是服务真崩了。

Q5: n8n 或 Dify 这种工具,数据库挂了会影响 Agent 运行吗?
A: 会。这些工具严重依赖数据库存储工作流配置和执行记录。如果数据库(如 Postgres)崩溃,前端界面可能打不开,任务也无法执行。建议将数据库也配置 `–restart unless-stopped`,并做好定时备份。

做好 AI Agent 的运维,核心在于“让它自己救自己”。配置好 Docker 重启策略,写几行简单的监控脚本,就能解决 90% 的半夜报警问题,把精力留给更重要的业务逻辑开发。

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/10259.html 商家投稿邮箱:zhujixuanblog@qq.com