当前系统状态
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 40074 25889 13219 161 964 13313
Swap: 7871 7871 0
[root@localhost ~]#
一、当前情况
Swap 满 = 系统已经在疯狂用硬盘当内存。
二、Swap 满了会有什么影响?
- 1. 系统变卡、反应慢
内存读写速度是硬盘的几十~上百倍,用 Swap 就是“降速运行”。 - 2. IO 飙升、磁盘繁忙
大量读写 swap 分区 → 磁盘 IO 占满 → 所有服务都慢。 - 3. OOM 可能触发
物理内存 + Swap 都不够时,内核会直接杀进程保系统。 - 4. 负载(load average)升高
表现为:SSH 慢、业务卡顿、数据库慢、接口超时。
三、怎么处理?(立刻能用的方案)
1. 先看是谁吃了 Swap / 内存
# 按内存排序
top -o %MEM
# 或者更直观
ps aux --sort=-%mem | head -20
找到最占内存的进程:
2. 临时缓解(立刻见效)
方法 A:清理缓存(温和)
sync && echo 3 > /proc/sys/vm/drop_caches
方法 B:临时关闭再开启 Swap(清空 Swap)
注意:会小卡一下,但能立刻释放 Swap
# 关闭所有swap
swapoff -a
# 等待几秒,再重新开启
swapon -a
执行后你的 Swap 会从 used 7871 → 0。
3. 根本解决(必须做)
Swap 满本质 = 物理内存不够 / 某个程序内存泄漏
① 找到泄漏/高内存程序,重启或优化
例如:
② 调整 swappiness(降低系统使用 Swap 的倾向)
# 临时生效
echo 10 > /proc/sys/vm/swappiness
# 永久生效
echo'vm.swappiness=10' >> /etc/sysctl.conf
sysctl -p
数值越低,越优先用物理内存。
③ 加物理内存(最有效)
你现在 40G 内存其实不算小,Swap 还能吃满,大概率是有程序异常耗内存。
四、你现在可以直接复制执行的命令
# 1. 看谁占内存
ps aux --sort=-%mem | head -10
# 2. 清空Swap(临时急救)
swapoff -a && swapon -a
# 3. 降低使用Swap的倾向
echo 10 > /proc/sys/vm/swappiness