不加资源限制跑容器是在给自己挖坑。一个容器内存泄漏,整台机器就挂了。这是我在生产环境踩过的坑,记下来。
内存限制
最重要的参数是 --memory 和 --memory-swap:
docker run -d \
--memory="512m" \
--memory-swap="512m" \
my-app
--memory-swap 设置成和 --memory 一样可以禁用 swap,避免容器把宿主机 swap 打满。
CPU 限制
两种方式,推荐用 --cpus:
# 限制最多使用 1.5 个 CPU 核心
docker run -d --cpus="1.5" my-app
# 老写法,cpuset 绑定具体核心
docker run -d --cpuset-cpus="0,1" my-app
在 docker-compose 里配置
services:
app:
image: my-app
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
reservations:
memory: 256M
注意 deploy.resources 在 docker-compose v3 中只有 swarm 模式才生效,standalone 模式要用 mem_limit 和 cpus。
监控实际使用
# 实时查看所有容器资源用量
docker stats
# 只看特定容器
docker stats my-app --no-stream
← 返回