CentOS 7 高效清空 Swap 空间操作指南
场景: 服务器监控警报频频响起,free -h 命令显示 Swap 使用率居高不下,物理内存却仍有富余,系统响应明显迟滞,关键应用性能受损,这种因 Swap 过度活跃导致的性能瓶颈,正是我们需要立即解决的痛点,及时清空 Swap,让系统重回流畅状态至关重要。
核心原理:为何 Swap 使用率过高需警惕?
Swap 本质是磁盘上划出的特殊分区或文件,充当物理内存(RAM)的应急替补,当物理内存耗尽,内核会将内存中不活跃的“冷数据”移至 Swap,腾出空间给急需的程序,Swap 的读写速度远低于物理内存(相差百倍以上),一旦 Swap 被频繁读写(称为 Swap In/Swap Out),系统性能将急剧下降,表现为卡顿、响应慢,严重影响服务器效率和用户体验,在物理内存充足但 Swap 已被占用的情况下,主动清空 Swap 是提升性能的有效手段。

实战方法:三种可靠清空 Swap 方案
swapoff 与 swapon 组合操作 (推荐首选)
这是最彻底、最直接的方法,适用于需要完全清空 Swap 的场景。
检查 Swap 使用状态:
free -h sudo swapon --show
确认当前 Swap 使用量和激活的 Swap 设备(如
/dev/sda2或/swapfile)。禁用所有 Swap 分区/文件:
sudo swapoff -a
此命令会强制内核将 Swap 中的数据逐页移回物理内存。务必注意: 执行前必须确保物理内存剩余空间大于当前已使用的 Swap 空间,若物理内存不足,可能导致进程因 OOM(内存溢出)被强制终止,引发服务崩溃!操作时建议通过
free -h动态监控内存变化。重新激活 Swap:

sudo swapon -a
free -h将显示 Swap 使用量归零,物理内存使用量相应增加(因数据从 Swap 迁回)。
关键提示: 此过程涉及大量磁盘 I/O 和内存迁移,在大型服务器或 Swap 使用量极高时可能耗时数秒至数分钟,期间系统负载会显著升高,务必在业务低峰期操作,并提前通知相关方。
sysctl 手动触发页回收 (临时缓解)
此方法通过调整内核参数即时释放缓存,间接促使 Swap 中部分未使用的页面被回收,效果较方案一温和且快速,但可能无法彻底清空。
释放 PageCache, dentries 和 inodes:
sudo sync; sudo sysctl -w vm.drop_caches=3
sync确保数据写入磁盘;vm.drop_caches=3指示内核清理 PageCache、dentries 和 inodes 缓存。针对性释放 Swap 空间:

sudo swapoff -a && sudo swapon -a # 结合方案一效果更佳
或观察
vm.drop_caches=3后 Swap 是否下降,此操作主要释放缓存,对已移入 Swap 的进程数据影响有限,适合快速缓解而非彻底清除。
自动化脚本定时清理 (长期维护)
对于 Swap 易累积的服务器,可配置定时任务周期性清理(如每周日凌晨)。
创建脚本 /usr/local/bin/clear_swap.sh:
#!/bin/bash
# 安全清空Swap脚本
if [ $(free | awk '/Mem:/ {print $4}') -gt $(free | awk '/Swap:/ {print $3}') ]; then
sync
swapoff -a && swapon -a
echo "[$(date)] Swap cleared successfully." >> /var/log/clear_swap.log
else
echo "[$(date)] Error: Insufficient free memory to clear Swap. Aborted." >> /var/log/clear_swap.log
exit 1
fi 赋予执行权限:
sudo chmod +x /usr/local/bin/clear_swap.sh
添加定时任务(crontab -e):
0 4 * * 0 /usr/local/bin/clear_swap.sh >/dev/null 2>&1 # 每周日4点执行
脚本核心安全机制: 在执行 swapoff 前,先判断当前可用物理内存是否大于已用 Swap 量,避免物理内存不足引发系统崩溃。
关键注意事项与优化建议
- 物理内存是根本: 清空 Swap 仅为临时优化手段,若服务器长期依赖 Swap,首要任务是升级物理内存或优化应用内存占用,使用
top、htop或ps aux查找内存消耗大的进程。 vm.swappiness参数调优: 该值(0-100)控制内核使用 Swap 的倾向,默认值 60 偏高,对于数据库、Web 服务器等追求性能的主机,建议调低:sudo sysctl vm.swappiness=10 # 临时生效
永久生效需在
/etc/sysctl.conf添加:vm.swappiness = 10
执行
sudo sysctl -p应用,数值越低,内核越倾向于保留物理内存,减少不必要的 Swap 使用(内存接近耗尽时仍会使用 Swap)。- 监控与预警: 部署如 Zabbix、Prometheus+Grafana 等监控工具,实时跟踪内存和 Swap 使用率,设置阈值告警(如 Swap 使用率 >20% 持续 10 分钟),做到事前预警而非事后补救。
- 生产环境操作纪律:
- 严格备份: 操作关键系统配置前,备份相关文件(如
/etc/fstab)。 - 低峰操作: 在业务流量最低时段执行 Swap 清空操作。
- 充分测试: 新脚本或配置先在非生产环境验证。
- 实时监控: 操作期间密切使用
free -h、top、iostat监控系统状态。
- 严格备份: 操作关键系统配置前,备份相关文件(如
作为长期维护 Linux 服务器的管理员,我坚持一个核心观点:Swap 是物理内存耗尽时的“安全气囊”,而非性能助推器,高效清空 Swap 的操作是必要的急救技能,但真正的性能基石始终在于充足的物理内存配置、优化的应用程序以及精细的内核参数调优,将 vm.swappiness 调整至合理范围(如10-30),结合严密的内存监控,才能从根源上避免系统陷入 Swap 风暴,保障服务的持续稳定与高效。
