最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
多容器编排环境下如何通过 Docker Compose 处理资源预留策略教程
时间:2026-07-14 09:07:46 编辑:袖梨 来源:一聚教程网
reservations 设置内存和 CPU 最小保障值,仅在资源紧张时起作用:空闲时容器可超用(不超 limits),紧张时优先保留该资源;它不锁定物理内存,只影响 cgroup 回收行为,需配合 limits 和禁用 swap 才完整生效。
直接在 docker-compose.yml 中用 deploy.resources.reservations 设置内存和 CPU 的最小保障值,就能实现资源预留。关键在于它不占用物理资源,只在系统紧张时起作用——既避免服务“饿死”,又不浪费空闲资源。
明确 reservations 的作用边界
预留(reservations)不是硬分配,而是调度器的承诺:
- 系统空闲时,容器可自由使用超出预留的资源(只要不超过
limits) - 内存或 CPU 紧张时,Docker 会优先保留这部分资源给该服务,其他容器的非预留内存更可能被回收
- 它本身不阻止其他容器启动,也不锁定物理内存页,仅影响 cgroup 的 reclaim 行为
合理设定预留值的实操方法
预留值不能拍脑袋定,要结合实际运行数据:
- 先用
docker stats <container>观察服务稳定运行时的 RSS 内存,取其 1.2–1.5 倍作为起点 - CPU 预留建议设为
limits.cpus的 40%–60%,例如硬限 1.0 核,预留 0.4–0.6 核 - 内存预留通常设为硬限制的 50%–70%,比如
memory: 1G,则reservations.memory: 512M–768M - 切忌预留过高(如 >80%),否则会人为制造资源争抢,降低整体利用率
配置写法与生效前提
以下是一个典型配置示例(适用于 Compose v3.8+):
version: '3.8'
services:
api:
image: my-api:latest
deploy:
resources:
limits:
cpus: '1.0'
memory: 1G
reservations:
cpus: '0.4'
memory: 512M
注意:该配置仅在 Docker Swarm 模式下(即使用 docker stack deploy)完全生效;若用 docker-compose up 启动,deploy 段会被忽略。非 Swarm 场景需改用容器运行时参数(如 --memory-reservation)或宿主机 cgroups 手动控制。
搭配硬限制与禁用 swap 才算完整
单独设预留不够,必须组合使用才能稳住关键服务:
- 必须设置
limits.memory,防止内存泄漏拖垮整机 - 显式设置
memory_swap与memory相同(如都为1G),彻底禁用 swap,避免 I/O 延迟引发超时 - 对数据库、配置中心等基础服务,可额外加
oom_score_adj: -500,降低被 OOM Killer 终止的概率
相关文章
- 飞猪客服电话是多少-飞猪机票24小时人工服务热线 10-15
- Hermes Agent MCP配置指南:从安装到调用Agent工具包全流程完整指南 10-15
- jm浏览器官网进入-jm网页版官方入口 10-15
- erolabs实验室官网登录入口-erolabs实验室官网登录链接直达 10-15
- jm漫画-官方正版网页入口 10-15
- 豆包官网网页版入口-豆包在线使用网页版 10-15