Linux 交换分区(Swap):虚拟内存的核心实现
Swap(交换分区 / 交换空间)是 Linux 系统中用于扩展内存能力的关键机制,它通过将磁盘空间模拟为 “虚拟内存”,解决了物理内存不足时的系统运行问题。理解 Swap 的工作原理和配置方法,对系统性能优化和稳定性保障至关重要。
Swap 的本质与核心价值
什么是 Swap?
Swap 是 Linux 内核使用的磁盘空间(分区或文件),用于临时存储物理内存中暂时不活跃的数据。当物理内存(RAM)不足时,内核会将这些 “不常用” 的数据转移到 Swap 中,释放物理内存给当前活跃的进程使用。
- 形象比喻:物理内存是 “高速缓存”,Swap 是 “备用仓库”—— 常用物品放在缓存,暂时不用的移到仓库,需要时再取回来。
Swap 的核心作用
- 避免 OOM 崩溃:当物理内存耗尽时,Swap 可防止进程因内存不足被内核强制杀死(OOM,Out Of Memory)。
- 支持内存密集型任务:如数据库服务、虚拟机、大数据处理等,这些任务可能短时间占用远超物理内存的空间。
- 实现系统休眠:休眠(Hibernate)时,内核会将内存中所有数据写入 Swap,下次开机时从 Swap 恢复状态。
Swap 的工作机制
内存页的 “换入” 与 “换出”
Linux 内存管理以 “页(Page,通常 4KB)” 为单位,Swap 的核心操作是内存页的 “换出”(从物理内存到 Swap)和 “换入”(从 Swap 到物理内存):
- 换出(Swap Out):当物理内存使用率过高,内核通过页面置换算法(如 LRU,最近最少使用)找出 “不活跃页”,写入 Swap。
- 换入(Swap In):当进程需要访问已被换出的内存页时,内核触发 “缺页中断”,将该页从 Swap 读回物理内存。
关键参数:vm.swappiness
控制内核使用 Swap 的 “积极程度”,取值范围 0-100:
0:尽可能不使用 Swap,仅在物理内存耗尽时才换出(适合对延迟敏感的场景,如数据库)。100:积极使用 Swap,优先释放物理内存(适合内存紧张的桌面系统)。- 默认值:通常为 60,平衡性能与内存利用率。
查看 / 修改方法:
1 | # 查看当前值 |
Swap 的两种实现形式
Linux 支持两种 Swap 形式,功能相同但适用场景不同:
| 形式 | 特点 | 适用场景 |
|---|---|---|
| Swap 分区 | 独立的磁盘分区,连续存储,性能略优 | 服务器、长期使用、需要休眠功能 |
| Swap 文件 | 普通文件,可动态创建 / 调整,无需分区 | 临时扩展、云服务器(无多余分区) |
Swap 的配置与管理
查看 Swap 状态
1 | # 查看总内存与 Swap 使用情况(-h 表示人性化显示) |
创建 Swap 分区(推荐服务器使用)
步骤:
划分磁盘分区(以
/dev/sdb1为例,需先通过fdisk或parted创建分区):1
2# 格式化分区为 Swap 格式
sudo mkswap /dev/sdb1启用 Swap 分区:
1
sudo swapon /dev/sdb1
设置开机自动挂载(编辑
/etc/fstab):1
echo "/dev/sdb1 none swap defaults 0 0" | sudo tee -a /etc/fstab
创建 Swap 文件(灵活便捷)
步骤:
创建 Swap 文件(以 4GB 为例,
bs=1M表示块大小 1MB,count=4096表示 4096 块):1
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
设置权限(仅 root 可访问,避免安全风险):
1
sudo chmod 600 /swapfile
格式化文件为 Swap 格式:
1
sudo mkswap /swapfile
启用 Swap 文件:
1
sudo swapon /swapfile
设置开机自动挂载:
1
echo "/swapfile none swap defaults 0 0" | sudo tee -a /etc/fstab
关闭与删除 Swap
1 | # 临时关闭指定 Swap(分区或文件) |
Swap 的性能与优化建议
1. 性能注意事项
- Swap 速度远低于物理内存:磁盘(即使 SSD)的读写速度比 RAM 慢 100-1000 倍,频繁的 “换入 / 换出”(称为 “Swap 颠簸”)会导致系统卡顿。
- 避免过度依赖 Swap:Swap 仅应作为应急机制,长期高 Swap 使用率通常意味着需要增加物理内存。
2. 推荐大小配置
Swap 大小需根据物理内存和使用场景调整:
- 普通服务器:物理内存 ≤ 8GB 时,Swap 建议等于物理内存;≥ 8GB 时,Swap 可设为 8GB(除非需要休眠)。
- 需要休眠:Swap 大小必须 ≥ 物理内存(确保能容纳所有内存数据)。
- 云服务器:可根据实际负载动态调整(如 2GB 物理内存配 1-2GB Swap)