--memory与--memory-swap介绍
在 Docker 命令中,--memory 和 --memory-swap 参数用于限制容器的内存使用:
-
--memory(或-m)- 设置容器可用的 物理 RAM 上限【Random Access Memory,随机存取存储器,也就是计算机的内存】(如
-m 500M表示最多使用 500MB 内存)。 - 超过此限制时,容器可能被 OOM (Out Of Memory) 终止。
- 设置容器可用的 物理 RAM 上限【Random Access Memory,随机存取存储器,也就是计算机的内存】(如
-
--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 的作用
- 扩展可用内存:当物理内存不足时,系统会将部分不活跃的内存数据移到 Swap 中,腾出 RAM 给更重要的进程使用。
- 防止 OOM(Out of Memory):如果没有 Swap,内存耗尽时系统可能会直接终止进程(如 Docker 容器),而 Swap 可以缓解这种情况。
- 支持休眠(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未设置,默认是--memory的 2 倍(如-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 使用,避免容器占用过多资源。