最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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 使用上限
这个参数最直观有效,设多少就是最多用多少核(支持小数):
-
--cpus="2":最多使用 2 个完整 CPU 核心 -
--cpus="1.2":最多使用 1.2 个核心,即每 100ms 周期最多运行 120ms(超了会被内核节流) - 不要用
--cpu-shares做硬限制——它只在 CPU 竞争时起权重作用,空闲时容器仍可跑满所有核
用 -m 和 --memory-swap 防内存失控
内存必须配对设置,否则可能意外启用 swap 导致性能骤降:
-
-m="512m":物理内存硬上限 512MB,超限直接 OOM Kill 进程 -
--memory-swap="512m":总内存(物理 + swap)上限也是 512MB,等于禁用 swap - 如果写成
--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.yml 的 deploy.resources.limits 下写:
services:app:image: nginxdeploy:resources:limits:cpus: '0.8'memory: 384M# 注意:compose 不直接支持 memory-swap,需用 --memory-swap 参数启动或改用 docker run
验证是否生效
- 查容器实际限制:
docker inspect limited-app | grep -A 5 "Memory|NanoCpus" - 进容器看 cgroup:
docker exec limited-app cat /sys/fs/cgroup/memory/memory.limit_in_bytes(返回字节数) - 压测测试:进容器执行
stress-ng --cpu 4 --timeout 30s,观察宿主机其他进程是否不受影响
关键点就两个:CPU 用 --cpus,内存用 -m 加等值 --memory-swap,其他参数如 --cpu-shares 或 --memory-reservation 是辅助策略,不能替代硬限制。
相关文章
- TPLink TLWR847N 无线路由器上网控制管控网络权限 09-02
- 如何使用Vim搭建Lua开发环境完整指南 09-02
- TPLink TLWR847N 51 ~53 无线路由器无线桥接(WDS)设置 09-02
- TPLink TLWDR5510 无线路由器控制上网时间方法 09-02
- Redis HyperLogLog 09-02
- Redis 发布订阅 09-02