Swap分区
目录
Swap分区详解:原理、配置与优化
Swap分区(交换分区)是操作系统用于扩展内存的一种磁盘空间,当物理内存(RAM)不足时,系统会将部分暂时不用的内存数据转移到Swap分区中,从而为当前运行的程序腾出更多可用内存。Swap是Linux/Unix系统中的重要机制,合理配置Swap能显著提升系统的稳定性和性能。
1. Swap分区的作用
(1)主要功能
- 扩展可用内存:当物理内存不足时,将不活跃的内存页换出到Swap,避免进程因OOM(Out Of Memory)被强制终止。
- 支持休眠(Hibernate):系统休眠时,将整个内存内容保存到Swap,以便恢复时重新加载。
- 缓解内存压力:即使物理内存充足,Linux内核也会适度使用Swap,以优化内存管理(如换出长时间未使用的进程)。
(2)适用场景
- 内存较小的系统(如云服务器、旧电脑)必须配置Swap。
- 运行内存密集型应用(如数据库、虚拟机)时,Swap可作为应急后备。
- 需要休眠功能的设备(如笔记本电脑)必须使用Swap。
2. Swap的实现方式
(1)Swap分区
- 传统方式:在磁盘上划分一个独立的分区(如
/dev/sda2)专用于Swap。 - 特点:
- 性能较好(连续磁盘空间)。
- 但大小固定,不易调整。
(2)Swap文件
- 现代方式:在文件系统中创建一个固定大小的文件(如
/swapfile)作为Swap。 - 特点:
- 灵活调整大小(无需重新分区)。
- 性能略低于Swap分区(受文件系统开销影响)。
(3)Zswap(内存压缩Swap)
- Linux内核特性:在内存不足时,先压缩内存页,仅将无法压缩的数据写入Swap。
- 优点:
- 减少磁盘I/O,提升响应速度。
- 适用于SSD等高速存储设备。
3. Swap的配置与管理
(1)查看当前Swap信息
free -h # 查看内存和Swap使用情况
swapon --show # 查看活跃的Swap设备
cat /proc/swaps # 查看Swap分区/文件详情
(2)创建Swap文件(以Ubuntu为例)
# 1. 创建Swap文件(示例:4GB)
sudo fallocate -l 4G /swapfile
# 2. 设置权限
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使用倾向(swappiness)
swappiness参数(范围0-100)控制内核使用Swap的积极性:- 0:尽量不使用Swap(除非内存耗尽)。
- 60:默认值(平衡模式)。
- 100:积极使用Swap。
# 查看当前值
cat /proc/sys/vm/swappiness
# 临时修改(示例:设置为10)
sudo sysctl vm.swappiness=10
# 永久修改
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
建议:
- 服务器建议设为
10(减少磁盘I/O)。 - 桌面环境可保留默认值
60。
4. Swap的性能优化
(1)选择高速存储设备
- 优先使用SSD:Swap的读写速度直接影响性能,HDD会导致严重延迟。
- NVMe SSD最佳:超低延迟,适合高频Swap场景。
(2)合理设置Swap大小
| 物理内存大小 | 推荐Swap大小 | 说明 |
|---|---|---|
| ≤ 2GB | 2 × 内存 | 小内存必须大幅扩展Swap |
| 2GB~8GB | 等于物理内存大小 | 平衡模式 |
| > 8GB | 4GB~8GB | 大内存仅需少量Swap应急 |
| 服务器(>64GB) | 禁用或1GB~4GB | 依赖OOM Killer管理内存溢出 |
(3)启用Zswap(Linux内核4.0+)
# 编辑GRUB配置(以Ubuntu为例)
sudo nano /etc/default/grub
# 在GRUB_CMDLINE_LINUX中添加:
GRUB_CMDLINE_LINUX="zswap.enabled=1 zswap.compressor=lz4"
# 更新GRUB并重启
sudo update-grub
sudo reboot
效果:内存页先压缩,仅不压缩部分写入Swap,减少I/O压力。
5. Swap的常见问题
(1)Swap使用率过高
- 表现:系统响应变慢,磁盘灯常亮。
- 解决方案:
- 增加物理内存。
- 优化应用内存占用(如减少MySQL缓存)。
- 调整
swappiness为更低值。
(2)如何禁用Swap
# 临时禁用
sudo swapoff -a
# 永久禁用(注释/etc/fstab中的Swap行)
sudo nano /etc/fstab
注意:禁用Swap可能导致OOM Killer强制终止进程!
(3)Swap分区 vs. Swap文件
| 对比项 | Swap分区 | Swap文件 |
|---|---|---|
| 性能 | 略高(直接磁盘访问) | 略低(文件系统开销) |
| 灵活性 | 固定大小,难调整 | 可动态调整大小 |
| 适用场景 | 传统系统、HDD | 现代系统、SSD/NVMe |
6. 总结
- Swap是内存的延伸:避免OOM,支持休眠,但过度使用会降低性能。
- 优化建议:
- 小内存设备必备Swap,大内存服务器可减少或禁用。
- 优先使用SSD,启用Zswap压缩。
- 调整
swappiness以平衡内存和Swap使用。
- 未来趋势:
- 随着内存价格下降,Swap的重要性降低。
- 但云服务器/容器(如Docker)仍依赖Swap应对突发负载。
提示:通过
vmstat 1监控si(Swap In)和so(Swap Out)频率,判断Swap是否合理配置!
Do not communicate by sharing memory; instead, share memory by communicating.

浙公网安备 33010602011771号