default cache_ram doesn’t respect /sys/fs/cgroup/memory.max . Always OOM killed in docker container

在 Docker 容器中运行 ComfyUI 时,默认的 cache_ram 内存预留计算使用了宿主机总内存而非容器 cgroup 内存限制,导致容器频繁被 OOM Killer 杀死。优先排查并设置 --cache-ram 参数为较低值或升级到修复此问题的 ComfyUI 版本。

快速结论:在 Docker 容器中运行 ComfyUI 时,默认的 cache_ram 内存预留计算使用了宿主机总内存而非容器 cgroup 内存限制,导致容器频繁被 OOM Killer 杀死。优先排查并设置 --cache-ram 参数为较低值或升级到修复此问题的 ComfyUI 版本。

适用环境:Docker 容器(cgroups v2)、ComfyUI、Linux 主机(示例中为 8×RTX 4090 服务器,1TB 内存)。

最快修复方案:在启动 ComfyUI 时显式传参 --cache-ram 20(或根据容器内存限制按 10% 比例计算),避免使用错误的默认计算值。

注意事项:该参数为临时规避方案。长期方案需等待 ComfyUI 官方修复(Issue 已标记解决,但未确认具体修复版本),升级 ComfyUI 后需重新验证。

问题场景

用户在一台 8×RTX 4090 服务器(总内存 1024GB)上运行多个 Docker 容器,其中某个 RTX 4090 容器被限制为 90GB 内存(cgroups v2,memory.max=96636764160)。启动 ComfyUI(命令:python main.py --cache-ram 20)后,进程在推理或加载模型时被系统 OOM Killer 杀死。

报错原文

default cache_ram doesn't respect /sys/fs/cgroup/memory.max . Always OOM killed in docker container

原因分析

ComfyUI 在 main.pymodel_management.py 中计算默认缓存内存头部空间时,使用了 psutil.virtual_memory().available,该 API 返回的是宿主机可用内存,而不是当前容器 cgroup 的内存限制。当容器内存限制(90GB)远小于宿主机总内存(1024GB)时,ComfyUI 会为缓存预留 10% 的宿主机内存(约 102GB),导致容器内存超限并被 OOM Killer 杀死。

可能原因还包括:容器的 memory.max 配置过低或未正确配置、ComfyUI 版本未包含 cgroup 感知修复。

环境排查

  • 检查 ComfyUI 版本(需确认是否包含 cgroup 内存感知修复)
  • 确认 Docker 容器 cgroup 版本:cat /sys/fs/cgroup/memory.max(v2)或 cat /sys/fs/cgroup/memory/memory.limit_in_bytes(v1)
  • 检查容器实际内存占用:grep . /sys/fs/cgroup/memory.current
  • 确认 psutil 库版本(较新版本对 cgroup 支持更完善)
  • 确认启动命令是否显式传参 --cache-ram

解决步骤

  1. 临时规避:在启动命令中显式添加 --cache-ram 参数,按容器内存限制的 10% 计算。示例:容器限制 90GB,则设置 --cache-ram 9(单位 GB)。
  2. 更新 ComfyUI:Issue 已标记为解决(Closed 2026-08-27),升级到最新版本,检查 model_management.py 是否已改用 cgroup 感知的内存读取(如 /sys/fs/cgroup/memory.max)。
  3. 验证 cgroup 配置:确保 Docker 容器指定了正确内存限制:docker run --memory=90g;并确认 memory.max 与限制值一致。
  4. 设置环境变量(可选):如果新版本仍不支持,可尝试设置 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True 减少显存碎片,间接降低内存压力。

验证方法

重新启动 ComfyUI 并长时间运行工作流(包含模型加载、推理等),同时监控容器内存占用:grep . /sys/fs/cgroup/memory.current,确保内存不超过 memory.max 且没有 OOM 事件:cat /sys/fs/cgroup/memory.events(关注 oom_kill 计数为 0)。

参考来源

Comfy-Org/ComfyUI #14938

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20699

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注