在 Linux 里,swap(交换空间)指的是一种虚拟内存机制。
简单说一句话:
👉 当内存(RAM)不够用时,Linux 会把一部分暂时不用的数据挪到磁盘上的 swap 空间里。
- RAM(内存):速度快,但容量有限
- Swap(交换空间):在硬盘/SSD 上,速度慢,但容量相对大
Linux 会把暂时不活跃的内存页写入 swap,这样可以:
- 给当前活跃程序腾出内存
- 避免因为内存耗尽而直接把程序杀掉(OOM)
Swap 的核心作用
- 扩展虚拟内存:允许系统运行超出物理内存大小的应用程序。
- 防止 OOM(Out of Memory)崩溃:当内存耗尽时,Linux 会触发 OOM Killer 机制随机杀死进程。适当的 Swap 可以提供缓冲,避免系统直接崩溃。
- 内存页换出(Paging Out):将物理内存中不常用的冷数据(Inactive/Idle Pages)转移到磁盘,腾出空间给热数据(Active Pages)。
- 支持系统休眠(Hibernate):休眠时,系统需要将整个物理内存的状态保存到非易失性存储中,通常就依赖 Swap 分区。
Swap 的存在形式
Swap 分区(Swap Partition)
- 定义:硬盘上独立划分出来的专门用于交换的磁盘分区。
- 特点:性能较好,适合传统的机械硬盘或固态硬盘,结构简单、稳定。
Swap 文件
- 定义:文件系统根目录下的一个特定大小的文件(例如 /swapfile)。
- 特点:灵活性极高,不需要重新分区即可随时创建、调整大小或删除。现代 Linux 发行版(如 Ubuntu)默认采用 Swap 文件。
ZRAM / ZSWAP(内存压缩交换,现代特性)
- 定义:将一部分 RAM 划出来作为压缩交换空间。
- 特点:数据写入时先在内存中进行压缩,极大地减少了对慢速磁盘的读写,特别适合内存较小、无物理 Swap 或需要提升响应速度的嵌入式设备和笔记本。
Swap 的优缺点
优点:
- 防止内存爆掉导致系统崩溃
- 对服务器、长时间运行的系统很重要
缺点:
- 磁盘比内存慢得多
- swap 用多了,系统会明显变卡
核心参数:Swappiness
swappiness 是控制 Linux 内核倾向于使用 Swap 程度的核心内核参数,取值范围为 0 到 100。
- 值较低(如 10 或更低):内核会尽量少使用 Swap,尽可能将数据保留在物理内存中,只有在物理内存快耗尽时才使用 Swap。
- 值较高(如 60,默认值):内核会积极地将内存页移到 Swap 中,以保持更多的空闲物理内存。
- 值为 0:在现代内核中,代表极少使用 Swap(早期内核中代表完全禁用)。
调优建议:对于拥有大内存(如 32GB 及以上)且运行数据库等高性能服务的服务器,通常会将 swappiness 调低(如 10),以避免不必要的磁盘 I/O 拖慢系统响应。
可以通过以下命令查看当前的 swappiness:
cat /proc/sys/vm/swappiness
swap 的常用命令
1.查看当前的 Swap 使用情况
free -h # 查看内存和 swap 使用情况
swapon –show # 查看当前启用的 swap
2. 创建并启用一个 Swap 文件(以 2GB 为例)
# 1. 创建一个 2GB 的空文件
sudo fallocate -l 2G /swapfile
# 或者使用 dd 命令:sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# 2. 设置严格的权限(仅 root 可读写,保障安全)
sudo chmod 600 /swapfile
# 3. 将文件格式化为 Swap 格式
sudo mkswap /swapfile
# 4. 立即激活该 Swap 文件
sudo swapon /swapfile
# 5. 配置开机自动挂载(将配置写入 /etc/fstab)
echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
3. 关闭 Swap
# 关闭指定的 Swap 文件或分区
sudo swapoff /swapfile
Swap 的大小应该设置多少?
关于 Swap 的大小,官方和社区并没有绝对统一的标准,通常取决于物理内存大小以及计算机的用途:
| 物理内存 (RAM) | 建议的 Swap 大小(常规参考) | 备注 |
| 小于 2 GB | RAM 的 2 倍 | 物理内存较小,需要更多 Swap 补充 |
| 2 GB ~ 8 GB | 等于 RAM 大小 | 满足常规日常办公或轻量服务器需求 |
| 8 GB ~ 32 GB | 等于或略小于 RAM(如 4GB – 8GB) | 视是否有休眠需求而定(休眠需要 Swap $\ge$ RAM) |
| 大于 32 GB | 4 GB ~ 8 GB 足够 | 大内存机器基本不需要过大的 Swap,除非用于休眠 |
总结与注意事项
性能瓶颈:磁盘(无论是 HDD 还是 SSD)的读写速度远慢于内存(RAM)。当系统频繁发生 Swap 进出(称为 Swap Thrashing/颠簸)时,系统性能会急剧下降,表现为卡顿、响应迟缓。
固态硬盘(SSD)磨损:虽然频繁写入 Swap 会产生一定的写入量,但现代 SSD 的寿命和写入擦除次数已经非常高,通常无需过分担心寿命问题。
最佳实践:如果应用对延迟极度敏感(如高频交易服务器、实时数据库),有些管理员会选择完全关闭 Swap;但对于绝大多数通用服务器和个人电脑,配置适量的 Swap 能够提供一道安全防线。