HCRM博客

CentOS 7 清空 Swap 分区的操作指南

CentOS 7 高效清空 Swap 空间操作指南

场景: 服务器监控警报频频响起,free -h 命令显示 Swap 使用率居高不下,物理内存却仍有富余,系统响应明显迟滞,关键应用性能受损,这种因 Swap 过度活跃导致的性能瓶颈,正是我们需要立即解决的痛点,及时清空 Swap,让系统重回流畅状态至关重要。


核心原理:为何 Swap 使用率过高需警惕?

Swap 本质是磁盘上划出的特殊分区或文件,充当物理内存(RAM)的应急替补,当物理内存耗尽,内核会将内存中不活跃的“冷数据”移至 Swap,腾出空间给急需的程序,Swap 的读写速度远低于物理内存(相差百倍以上),一旦 Swap 被频繁读写(称为 Swap In/Swap Out),系统性能将急剧下降,表现为卡顿、响应慢,严重影响服务器效率和用户体验,在物理内存充足但 Swap 已被占用的情况下,主动清空 Swap 是提升性能的有效手段。

CentOS 7 清空 Swap 分区的操作指南-图1

实战方法:三种可靠清空 Swap 方案

swapoffswapon 组合操作 (推荐首选)

这是最彻底、最直接的方法,适用于需要完全清空 Swap 的场景。

  1. 检查 Swap 使用状态:

    free -h
    sudo swapon --show

    确认当前 Swap 使用量和激活的 Swap 设备(如 /dev/sda2/swapfile)。

  2. 禁用所有 Swap 分区/文件:

    sudo swapoff -a

    此命令会强制内核将 Swap 中的数据逐页移回物理内存。务必注意: 执行前必须确保物理内存剩余空间大于当前已使用的 Swap 空间,若物理内存不足,可能导致进程因 OOM(内存溢出)被强制终止,引发服务崩溃!操作时建议通过 free -h 动态监控内存变化。

  3. 重新激活 Swap:

    CentOS 7 清空 Swap 分区的操作指南-图2
    sudo swapon -a

    free -h 将显示 Swap 使用量归零,物理内存使用量相应增加(因数据从 Swap 迁回)。

关键提示: 此过程涉及大量磁盘 I/O 和内存迁移,在大型服务器或 Swap 使用量极高时可能耗时数秒至数分钟,期间系统负载会显著升高,务必在业务低峰期操作,并提前通知相关方。

sysctl 手动触发页回收 (临时缓解)

此方法通过调整内核参数即时释放缓存,间接促使 Swap 中部分未使用的页面被回收,效果较方案一温和且快速,但可能无法彻底清空。

  1. 释放 PageCache, dentries 和 inodes:

    sudo sync; sudo sysctl -w vm.drop_caches=3

    sync 确保数据写入磁盘;vm.drop_caches=3 指示内核清理 PageCache、dentries 和 inodes 缓存。

  2. 针对性释放 Swap 空间:

    CentOS 7 清空 Swap 分区的操作指南-图3
    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 量,避免物理内存不足引发系统崩溃。


关键注意事项与优化建议

  1. 物理内存是根本: 清空 Swap 仅为临时优化手段,若服务器长期依赖 Swap,首要任务是升级物理内存优化应用内存占用,使用 tophtopps aux 查找内存消耗大的进程。
  2. vm.swappiness 参数调优: 该值(0-100)控制内核使用 Swap 的倾向,默认值 60 偏高,对于数据库、Web 服务器等追求性能的主机,建议调低:
    sudo sysctl vm.swappiness=10 # 临时生效

    永久生效需在 /etc/sysctl.conf 添加:

    vm.swappiness = 10

    执行 sudo sysctl -p 应用,数值越低,内核越倾向于保留物理内存,减少不必要的 Swap 使用(内存接近耗尽时仍会使用 Swap)。

  3. 监控与预警: 部署如 Zabbix、Prometheus+Grafana 等监控工具,实时跟踪内存和 Swap 使用率,设置阈值告警(如 Swap 使用率 >20% 持续 10 分钟),做到事前预警而非事后补救。
  4. 生产环境操作纪律:
    • 严格备份: 操作关键系统配置前,备份相关文件(如 /etc/fstab)。
    • 低峰操作: 在业务流量最低时段执行 Swap 清空操作。
    • 充分测试: 新脚本或配置先在非生产环境验证。
    • 实时监控: 操作期间密切使用 free -htopiostat 监控系统状态。

作为长期维护 Linux 服务器的管理员,我坚持一个核心观点:Swap 是物理内存耗尽时的“安全气囊”,而非性能助推器,高效清空 Swap 的操作是必要的急救技能,但真正的性能基石始终在于充足的物理内存配置、优化的应用程序以及精细的内核参数调优,将 vm.swappiness 调整至合理范围(如10-30),结合严密的内存监控,才能从根源上避免系统陷入 Swap 风暴,保障服务的持续稳定与高效。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/35366.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~