👆Docker命令中的--memory与--memory-swap

169 阅读2分钟

--memory与--memory-swap介绍

在 Docker 命令中,--memory--memory-swap 参数用于限制容器的内存使用:

  1. --memory (或 -m)

    • 设置容器可用的 物理 RAM 上限【Random Access Memory,随机存取存储器,也就是计算机的内存】(如 -m 500M 表示最多使用 500MB 内存)。
    • 超过此限制时,容器可能被 OOM (Out Of Memory) 终止。
  2. --memory-swap

    • Swap 既不是纯粹的内存(RAM),也不是普通的外存(硬盘) ,而是操作系统利用磁盘空间(外存)模拟的虚拟内存扩展
    • 设置 RAM + Swap 的总上限(如 --memory-swap=1G 表示 RAM + Swap 合计最多 1GB)。
    • 若未显式指定,默认值为 --memory两倍(例如 -m 500M 且未设 --memory-swap,则 Swap 可用 500MB,总上限 1GB)。
    • 若设为 -1,表示允许容器使用无限制的 Swap(但需主机支持 —— 即主机必须启用 Swap)。

关键区别

  • --memory 仅限制物理 RAM,而 --memory-swap 限制 RAM + Swap 的总和。
  • --memory-swap 等于 --memory,则 禁用 Swap

Swap 介绍

Swap(交换空间) 是操作系统在物理内存(RAM)不足时,使用磁盘空间(Swap分区或Swap文件)作为临时内存的一种机制。

Swap 的作用

  1. 扩展可用内存:当物理内存不足时,系统会将部分不活跃的内存数据移到 Swap 中,腾出 RAM 给更重要的进程使用。
  2. 防止 OOM(Out of Memory):如果没有 Swap,内存耗尽时系统可能会直接终止进程(如 Docker 容器),而 Swap 可以缓解这种情况。
  3. 支持休眠(Hibernate):Linux 的休眠功能依赖 Swap 来保存内存数据到磁盘。

Swap 的缺点

  • 速度慢:磁盘(HDD/SSD)比 RAM 慢得多,频繁使用 Swap 会导致性能下降。
  • 占用磁盘空间:Swap 会占用一部分存储空间(通常建议 Swap 大小为 RAM 的 1~2 倍,但具体取决于需求)。

在 Docker 中的 Swap 控制

  • --memory 限制容器的 物理 RAM 使用量
  • --memory-swap 限制 RAM + Swap 的总使用量
    • 如果 --memory=500M--memory-swap=1G,则容器最多能用 500MB RAM + 500MB Swap
    • 如果 --memory-swap 未设置,默认是 --memory2 倍(如 -m 500M → 总上限 1G,即 500MB RAM + 500MB Swap)。
    • 如果 --memory-swap 设为 -1,则允许容器无限制使用 Swap(需主机支持)。

如何查看系统的 Swap 使用情况?

在 Linux 中运行:

free -h

输出示例:

              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        3.2G        200M        2.4G        5.1G
Swap:          2.0G        512M        1.5G

这里 Swap 行显示总大小、已用和剩余空间。

总结

  • Swap 是“备用内存”,用磁盘空间扩展可用内存,但速度比 RAM 慢。
  • Docker 通过 --memory--memory-swap 限制内存和 Swap 使用,避免容器占用过多资源。