当前位置:首页>Linux>Linux系统swap满的影响与处理

Linux系统swap满的影响与处理

  • 2026-08-27 13:54:06
Linux系统swap满的影响与处理

当前系统状态

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          40074       25889       13219         161         964       13313
Swap:          7871        7871           0
[root@localhost ~]#

一、当前情况

  • • 物理内存:约 39G,用了 25G,还剩不少
  • • Swap:7871M 全部占满,0 空闲

Swap 满 = 系统已经在疯狂用硬盘当内存。


二、Swap 满了会有什么影响?

  1. 1. 系统变卡、反应慢
    内存读写速度是硬盘的几十~上百倍,用 Swap 就是“降速运行”。
  2. 2. IO 飙升、磁盘繁忙
    大量读写 swap 分区 → 磁盘 IO 占满 → 所有服务都慢。
  3. 3. OOM 可能触发
    物理内存 + Swap 都不够时,内核会直接杀进程保系统。
  4. 4. 负载(load average)升高
    表现为:SSH 慢、业务卡顿、数据库慢、接口超时。

三、怎么处理?(立刻能用的方案)

1. 先看是谁吃了 Swap / 内存

# 按内存排序
top -o %MEM

# 或者更直观
ps aux --sort=-%mem | head -20

找到最占内存的进程:

  • • Java
  • • MySQL
  • • Redis
  • • Nginx/PHP-FPM
  • • 某些脚本、定时任务

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 满本质 = 物理内存不够 / 某个程序内存泄漏

① 找到泄漏/高内存程序,重启或优化

例如:

  • • Java 堆太大
  • • MySQL 缓冲池过大
  • • Redis 没设置内存上限
  • • 程序死循环、未释放资源

② 调整 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

最新文章

随机文章