一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Docker 容器如何限制单个容器的 CPU 与内存资源占用

时间:2026-09-02 20:38:48 编辑:袖梨 来源:一聚教程网

必须用--cpus和-m加等值--memory-swap实现硬限制:--cpus="1.5"最多用1.5核,-m="2g"--memory-swap="2g"禁用swap并设内存硬上限,二者依托Cgroups强制生效,非建议性配置。

直接用 docker run 的参数就能严格限制单个容器的 CPU 和内存,核心是靠 Linux 内核的 Cgroups 实现硬隔离,不是“建议”而是强制生效。

用 --cpus 限制 CPU 使用上限

这个参数最直观有效,设多少就是最多用多少核(支持小数):

  1. --cpus="2":最多使用 2 个完整 CPU 核心
  2. --cpus="1.2":最多使用 1.2 个核心,即每 100ms 周期最多运行 120ms(超了会被内核节流)
  3. 不要用 --cpu-shares 做硬限制——它只在 CPU 竞争时起权重作用,空闲时容器仍可跑满所有核

用 -m 和 --memory-swap 防内存失控

内存必须配对设置,否则可能意外启用 swap 导致性能骤降:

  1. -m="512m":物理内存硬上限 512MB,超限直接 OOM Kill 进程
  2. --memory-swap="512m":总内存(物理 + swap)上限也是 512MB,等于禁用 swap
  3. 如果写成 --memory-swap="1g",表示允许最多 512MB 物理内存 + 512MB swap,但 swap 会拖慢响应,生产环境一般设为与 -m 相同

组合命令示例

docker run -d --name limited-app --cpus="0.8" -m="384m" --memory-swap="384m" nginx

运行后可用 docker stats limited-app 实时观察 CPU% 和 MEM USAGE 是否始终卡在设定值内。

Docker Compose 中等效配置

docker-compose.ymldeploy.resources.limits 下写:

services:app:image: nginxdeploy:resources:limits:cpus: '0.8'memory: 384M# 注意:compose 不直接支持 memory-swap,需用 --memory-swap 参数启动或改用 docker run

验证是否生效

  1. 查容器实际限制:docker inspect limited-app | grep -A 5 "Memory|NanoCpus"
  2. 进容器看 cgroup:docker exec limited-app cat /sys/fs/cgroup/memory/memory.limit_in_bytes(返回字节数)
  3. 压测测试:进容器执行 stress-ng --cpu 4 --timeout 30s,观察宿主机其他进程是否不受影响

关键点就两个:CPU 用 --cpus,内存用 -m 加等值 --memory-swap,其他参数如 --cpu-shares--memory-reservation 是辅助策略,不能替代硬限制。

热门栏目