在 CentOS 中,Swap 被占满通常不是“清理”就能解决,而是要先搞清楚是谁在用、为什么用,再决定处理方式。下面按排查 → 释放 → 优化配置一步步来。
free -h
swapon --show
查看具体 swap 占用:
cat /proc/swaps
⚠️ Swap 不能按“文件”删除,只能从进程层面解决。
top
for file in /proc/*/status ; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file
done | sort -k2 -n -r | head -20
可以看到哪个进程 / 程序用了多少 Swap。
如果某个 Java / MySQL / PHP / Python 进程吃了大量 Swap:
systemctl restart xxx
或
kill -9 PID
✅ 这是最安全、最推荐的方式
如果你确认内存足够:
swapoff -a
swapon -a
✅ 作用:
⚠️ 风险:
确认内存足够再执行:
free -h
free -h
Mem available 很小,就会疯狂用 Swap✅ 解决:
查看:
cat /proc/sys/vm/swappiness
默认通常是 30 或 60
sysctl vm.swappiness=10
vi /etc/sysctl.conf
vm.swappiness=10
sysctl -p
✅ 推荐服务器设置 10–30
常见:
-Xmxinnodb_buffer_pool_size 太大✅ 用 top / htop / ps 查异常进程
innodb_buffer_pool_size = 60% 内存
java -Xms512m -Xmx1024m
✅ Swap 满了 ≠ 清 Swap,而是:
❌ 不建议频繁 swapoff -a
✅ 长期目标是:让内存够用,Swap 只是保险
如果你愿意,可以把下面信息发我,我可以帮你精确判断:
free -htop 前 10 行我可以直接告诉你该动哪里、不动哪里。