描述:
当一个 Agent 任务产生大量密集的工具调用时,内存中的 EventQueue 会膨胀到数千个事件(本次观察到 3700+),占满后端进程,导致所有
API 端点超时 —— 相当于内部 DoS。
复现步骤:
- 启动一个大型 agent 审计任务(如包含多个子任务的 CVE 分析)
- 观察后端日志中 EventQueue 的大小,会迅速增长到数千
- 在任务运行期间,访问任意其他页面(one-click-cve、admin、vulnerabilities、skills 等)
实际表现:
- 前端 nginx 返回 504 Gateway Timeout(upstream 60s 超时)
- 大量请求返回 499(客户端等不及主动断开)
- 整个应用完全无法使用,直到手动重启后端
- 后端日志出现 Stream completed with no content after N chunks, finish_reason=length/stop 警告
期望表现:
单个长时间运行的 agent 任务不应阻塞其他 API 请求,其余端点应保持正常响应。
环境信息:
- 后端镜像: ghcr.io/larlarua/autocve-backend:v1.0.0
- 未设置资源限制(CPU/Memory limits 均为 0,即无限制)
- 虚拟机: 7.2GB 内存, 4 vCPU, 30GB 磁盘
补充发现:
- 后端容器没有设置 CPU 和内存限制,单个任务可耗尽全部资源
- 重启前 RestartCount 为 0,说明没有自动恢复机制
- 磁盘 85% 满,docker builder prune 清理了 2GB+ 构建缓存
建议修复方向:
- 给 EventQueue 加上深度上限,超出时施加反压
- 将 agent 任务执行移到后台 worker(Celery/任务队列),不要阻塞 API 进程
- 给后端容器加上 Docker 资源限制(--memory、--cpus)
- 对单个任务的工具调用加上并发限制,防止事件风暴
描述:
当一个 Agent 任务产生大量密集的工具调用时,内存中的 EventQueue 会膨胀到数千个事件(本次观察到 3700+),占满后端进程,导致所有
API 端点超时 —— 相当于内部 DoS。
复现步骤:
实际表现:
期望表现:
单个长时间运行的 agent 任务不应阻塞其他 API 请求,其余端点应保持正常响应。
环境信息:
补充发现:
建议修复方向: