Swap空间满了怎么清理
导读:Linux 中清理 Swap 的安全步骤 一、先判断是否可以安全释放 查看内存与 Swap 使用:运行命令:free -h 或 swapon -s,确认 Swap 已用满且物理内存是否有足够空闲(如可用内存明显大于 Swap 已用量,才适...
Linux 中清理 Swap 的安全步骤
一、先判断是否可以安全释放
- 查看内存与 Swap 使用:运行命令:free -h 或 swapon -s,确认 Swap 已用满且物理内存是否有足够空闲(如可用内存明显大于 Swap 已用量,才适合执行回收)。
- 原则:只有当物理内存足以容纳当前被换出的页面时,回收才安全;否则可能引发 OOM(内存溢出) 或严重卡顿。
二、快速释放 Swap 的推荐做法
- 优雅回收(无需重启):依次执行
- sudo swapoff -a(将 Swap 数据迁回内存,过程可能较慢,请耐心等待)
- sudo swapon -a(重新启用 Swap)
- 等待期间可用 free -m 或 swapon -s 观察 Swap 使用是否降到接近 0。
- 重要前提:确保系统空闲内存足以容纳被换出的数据,否则不建议执行此操作。
三、无法一次性回收时的定位与处理
- 找出占用 Swap 的进程:
- 按进程汇总:
for pid in $(ls /proc | grep '^[0-9]'); do if [ -f /proc/$pid/status ]; then swap=$(grep VmSwap /proc/$pid/status 2> /dev/null | awk '{ print $2} ') if [ -n "$swap" ] & & [ "$swap" -gt 0 ]; then cmd=$(cat /proc/$pid/cmdline 2> /dev/null | tr '\0' ' ') echo "PID: $pid, Swap: ${ swap} kB, CMD: $cmd" fi fi done | sort -k5 -nr - 按进程详细页汇总:
for i in $(cd /proc; ls | grep -E '^[0-9]+'); do awk '/Swap:/{ a+=$2} END{ printf "%s %.2fM\n", '"$i"', a/1024} ' /proc/$i/smaps 2> /dev/null done | sort -k2 -nr | head
- 按进程汇总:
- 处理建议:优先尝试重启占用 Swap 较多的进程以释放其内存;如业务允许,再考虑终止异常进程。一般“释放 Swap”的本质是让相关进程释放内存或重启。
四、释放页缓存以间接帮助回收 Swap(可选)
- 执行:sudo sync & & echo 3 | sudo tee /proc/sys/vm/drop_caches
- 作用:清理页缓存、目录项和 inode,释放更多物理内存,从而让系统更容易把页面从 Swap 换回。注意这并非直接“清理 Swap”,而是为回收创造条件。
五、中长期优化与扩容
- 降低系统对 Swap 的依赖:临时设置 vm.swappiness=10(默认通常为 60),减少换出倾向:
- 临时:sudo sysctl vm.swappiness=10
- 永久:在 /etc/sysctl.conf 中添加 vm.swappiness=10 并执行 sudo sysctl -p
- 扩容或调整 Swap:
- 新增 Swap 文件:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab - 如需减少/移除 Swap,先禁用(swapoff),再删除对应文件或在 /etc/fstab 注释条目,必要时用 mkswap/swapon 重建或重新启用。
- 新增 Swap 文件:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Swap空间满了怎么清理
本文地址: https://pptw.com/jishu/784400.html
