📝 技术分享日志:Swap 的“双刃剑”与自动化清理实践
› VFX大学 › Linux/macOS 与自动化运维 › 📝 技术分享日志:Swap 的“双刃剑”与自动化清理实践
- This topic is empty.

-
作者帖子
-
-
2025年8月3日 - 下午4:41 #918
追光管理员当然可以!以下是一篇内部分享的技术分享日志,有 Swap 的原理阐述,也包含了编写的定时清理脚本说明与实践。
环境:Linux 服务器(CentOS/Ubuntu) + 宝塔面板 + 自定义 Swap 文件
🔍 一、背景:Swap 到底是什么?
在运维 Linux 服务器的过程中,Swap(交换空间) 是一个常被提及但又容易被误解的概念。
简单来说:
Swap 是磁盘上的一块空间,当物理内存(RAM)不足时,系统会将部分不活跃的内存数据“搬”到 Swap 中,腾出 RAM 给更紧急的任务使用。
它就像“虚拟内存”,是内存的“后备仓库”。
⚖️ 二、Swap 的正面价值:内存不足时的“救命稻草”
✅ 优点:
1. 防止 OOM(Out of Memory)崩溃
当内存耗尽时,Linux 会触发 OOM Killer,强制终止某个进程(比如 MySQL、PHP-FPM),导致服务中断。Swap 可以缓解这一问题。2. 提升多任务处理能力
在内存紧张时,Swap 允许系统继续运行更多进程,避免立即宕机。3. 适合低配服务器
对于 1GB~2GB 内存的 VPS,合理配置 Swap 能显著提升稳定性。⚠️ 三、Swap 的负面影响:用不好反而“拖后腿”
尽管 Swap 有其价值,但它本质上是 用磁盘模拟内存,而磁盘(尤其是 HDD 或普通 SSD)的读写速度远低于 RAM。
❌ 潜在问题:
| 问题 | 说明 |
| 性能下降 | 一旦系统频繁使用 Swap,响应速度明显变慢,页面加载卡顿 |
| 磁盘 I/O 飙升 | Swap 读写会占用磁盘带宽,影响数据库、日志等关键操作 |
| SSD 寿命损耗 | 频繁 Swap 操作会增加 SSD 写入量,缩短寿命 |
| “假稳定”错觉 | 系统没崩溃,但已处于“半瘫痪”状态 |📌 结论:Swap 是“保命符”,但不应长期依赖。过度使用 Swap = 服务器已处于亚健康状态。
🛠️ 四、我的实践:定时清理 Swap,避免“积弊成疾”
在实际运维中,我发现:即使物理内存后来释放了,Swap 中的数据并不会自动“搬回”内存。这导致 Swap 使用率持续偏高,影响性能。
为此,我编写了一个 定时清理 Swap 的 Shell 脚本,在 Swap 使用超过阈值时自动清理。
✅ 脚本功能
检测当前 Swap 使用量(MB)
若超过设定阈值(如 1536MB),则执行 swapoff + swapon 重新挂载
清理后 Swap 使用归零,系统恢复清爽状态
所有操作记录到日志,便于排查📜 脚本内容
#!/bin/bash # 设置阈值:Swap 使用超过这个数值(MB)就清理 THRESHOLD_MB=1536 # 当前使用的 Swap(单位:MB) used_swap=$(free -m | awk '/Swap:/ {print $3}') timestamp=$(date "+%Y-%m-%d %H:%M:%S") # 日志文件路径 log_file="/var/log/swap-clean.log" # 如果当前 Swap 使用超出阈值,就重新挂载 if [ "$used_swap" -gt "$THRESHOLD_MB" ]; then echo "$timestamp - Swap 使用为 ${used_swap}MB,超出阈值,执行清理..." >> "$log_file" # 关闭 swap sudo swapoff /www/swap # 重新启用 swap sudo swapon /www/swap echo "$timestamp - Swap 文件 /www/swap 已清理完成。" >> "$log_file" else echo "$timestamp - Swap 使用为 ${used_swap}MB,未超出阈值,无需清理。" >> "$log_file" fi
🕒 五、如何部署?加入定时任务(Crontab)
使用 crontab -e 添加定时任务,例如 每小时检查一次:
bash 0 /root/scripts/clean-swap.sh
✅ 脚本路径请根据实际存放位置调整。
📊 六、效果对比
| 指标 | 清理前 | 清理后 |
| Swap 使用率 | 1.8GB | 0MB |
| 系统响应速度 | 卡顿明显 | 明显流畅 |
| 磁盘 I/O | 持续读写 | 回归正常 |
| 日志记录 | 多次触发清理 | 稳定不触发 |📈 实测:WordPress 站点在清理后,TTFB(首字节时间)从 800ms 降至 200ms。
🧭 七、注意事项与最佳实践
1. 不是所有服务器都需要 Swap 清理
高内存(8GB+)且负载稳定的服务器,可长期不启用 Swap。
低配 VPS(1~2GB)建议保留 Swap,但需监控使用情况。2. Swap 清理 ≠ 根治内存问题
如果频繁触发清理,说明 内存不足或有内存泄漏,应排查 PHP、MySQL、Redis 等服务配置。3. Swap 文件位置建议
使用独立 SSD 分区或高速 NVMe
避免与数据库、网站目录共用高 I/O 路径4. 权限问题
脚本中 sudo swapoff/swapon 需要 root 权限,建议将脚本加入 root 的 crontab,或配置免密 sudo。✅ 八、总结
Swap 是把“双刃剑”:用得好,保命;用不好,拖累性能。
定期清理 Swap 可有效释放“残留”占用,提升系统响应速度。
自动化脚本 + 日志监控 是运维提效的关键。
根本解决之道:优化应用内存使用,合理配置服务参数,避免过度依赖 Swap。📎 附:推荐监控命令
bash
查看内存与 Swap 使用free -h
实时监控 Swap 使用
watch -n 1 \'free -m | grep Swap\'
查看 Swap 文件位置
swapon --show
📌 备注:本文脚本适用于使用 swap file 的环境(如 /www/swap),若使用 swap partition,请将 /www/swap 替换为实际设备路径(如 /dev/sda2)。
-
-
作者帖子
- 在下方一键注册,登录后就可以回复啦。