限制容器CPU和内存配额需通过--cpus、--memory等参数设置:--cpus=1.5表示每100ms最多用150ms CPU时间;--memory=512m设内存硬上限,须配--memory-swap控制swap行为;--memory-reservation=512m设软限制以保障低压力下内存优先级。

限制容器的 CPU 和内存配额,核心在于 启动时通过 --cpus、--memory 等参数精确控制资源边界,避免单个容器抢占过多宿主机资源,同时保障服务稳定性与多容器公平调度。
用 --cpus 精确限制 CPU 时间份额
--cpus 指定容器可使用的 CPU 核心数(支持小数),本质是设置 CFS 调度器的 cpu.cfs_quota_us 与 cpu.cfs_period_us。例如 --cpus=1.5 表示每 100ms 周期内最多使用 150ms 的 CPU 时间。
- 只写整数(如
--cpus=2)等价于绑定到任意 2 个逻辑 CPU,但不保证独占 - 搭配
--cpuset-cpus="0-1"可限定容器仅在特定物理核上运行,适合 NUMA 场景或绑核优化 - 注意:该限制对短时突发负载有效,但无法阻止瞬间高 CPU 占用(需配合应用层限流)
用 --memory 控制内存上限并防止 OOM
--memory 设置容器可用内存硬上限(如 --memory=512m),超出即触发内核 OOM Killer 杀死进程。必须配合 --memory-swap 明确交换空间行为:
-
--memory=512m --memory-swap=512m:禁用 swap,纯内存限制 -
--memory=512m --memory-swap=1g:允许最多 512MB swap(1G - 512M = 512M swap) -
--memory=512m --memory-swap=-1:不限制 swap,仅限制物理内存
建议生产环境关闭 swap(即 --memory-swap 与 --memory 值一致),避免因换页导致延迟不可控。
配合 --memory-reservation 实现软性内存保障
--memory-reservation 设定内存“软限制”,用于内存压力下的优先级管理。当系统内存紧张时,低于 reservation 的容器更不容易被回收;高于则可能被压缩或 kill。
- 例如:
--memory=1g --memory-reservation=512m,表示容器承诺至少有 512MB 可用,但最多不能超 1GB - 它不强制限制,只影响内核内存回收策略,适合对延迟敏感但负载波动大的服务
- 务必确保
--memory-reservation ≤ --memory,否则启动失败
验证与调试配额是否生效
容器运行后,可通过以下方式确认资源限制已加载:
- 进入容器执行
cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us和/sys/fs/cgroup/cpu/cpu.cfs_period_us查看 CPU 配额 - 检查
/sys/fs/cgroup/memory/memory.limit_in_bytes和memory.memsw.limit_in_bytes确认内存限制 - 在宿主机用
docker stats <container></container>实时观察实际使用率,对比设定值判断是否触达瓶颈
若发现 CPU 使用率长期卡在限额附近,或内存频繁接近 limit 并触发 oom_kill,说明配额过紧,需结合压测适当调高。

















