全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

内存限制与 OOM

容器内存限制防止内存耗尽导致宿主不稳定,下面介绍配置方法。

--memory 参数

Bash
# 限制 512MB 内存
docker run -d --memory=512m my-app

# 限制 1GB 内存
docker run -d --memory=1g my-app

# 限制 256MB,swap 512MB
docker run -d --memory=256m --memory-swap=512m my-app

--memory 限制容器物理内存,--memory-swap 限制内存 + swap 总量。

--memory-swap

Bash
# 内存 512MB,swap 256MB(总计 768MB)
docker run -d --memory=512m --memory-swap=768m my-app

# 不限制 swap(不推荐)
docker run -d --memory=512m --memory-swap=-1 my-app

OOM Killer

触发条件

容器内存超过限制时,Linux OOM Killer 会终止容器进程:

Bash
# 查看容器是否被 OOM 杀死
docker inspect my-app | grep -A 5 "OOMKilled"

# 输出
"OOMKilled": true

禁用 OOM Killer

Bash
# 不推荐:禁用 OOM Killer
docker run -d --memory=512m --oom-kill-disable my-app

# 容器超限时不会被杀死,可能阻塞宿主

禁用 OOM Killer 可能导致宿主内存耗尽,谨慎使用。

Compose 配置

YAML
version: '3.8'

services:
  app:
    image: my-app
    deploy:
      resources:
        limits:
          memory: 512M
        reservations:
          memory: 256M

查看内存使用

Bash
# 实时监控
docker stats my-app

# 输出
CONTAINER ID   NAME      CPU %   MEM USAGE / LIMIT   MEM %
abc123         my-app    1.5%    256MiB / 512MiB     50%

# 查看容器内存限制
docker inspect my-app | grep -A 5 "Memory"

# 输出
"Memory": 536870912,  # 512MB
"MemorySwap": 1073741824,  # 1GB
"MemoryReservation": 268435456  # 256MB

更新限制

Bash
# 运行时更新内存限制
docker update --memory=1g my-app
docker update --memory-swap=2g my-app

最佳实践

  • 所有容器内存限制总和应小于宿主内存
  • 预留 20% 宿主内存给系统和 Docker Daemon
  • Java 容器配置 -XX:+UseContainerSupport 识别限制
  • Node.js 配置 --max-old-space-size 限制堆大小

要点总结

  • --memory 限制容器物理内存,--memory-swap 限制内存 + swap
  • 超限时 OOM Killer 终止容器,可禁用但不推荐
  • Compose 通过 deploy.resources.limits.memory 配置
  • docker stats 实时监控内存使用
  • Java/Node.js 需配置 JVM/Node 参数识别容器限制

📝 发现内容有误?点击此处直接编辑

← 上一篇 CPU 配额与限制
下一篇 → 资源监控与统计
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库