温馨提示×

ubuntu swap满了怎么处理

小樊
35
2026-10-07 04:01:58
栏目: 智能运维

在 Ubuntu 中,swap 满了(swap 使用率 100%)通常说明内存不足,系统正在大量使用交换空间,可能导致系统卡顿甚至OOM(内存耗尽)。下面按紧急处理 → 查找原因 → 长期解决的顺序说明。


一、先确认当前状态(紧急排查)

free -h
swapon --show
top
# 或
htop

重点看:

  • Mem 是否也快满了
  • 哪个进程占用内存 / swap 最多

二、临时释放 swap(不重启)

⚠️ 注意:清空 swap 前必须确保 物理内存足够,否则会直接 OOM 杀进程。

1. 关闭再开启 swap(会清空 swap)

sudo swapoff -a
sudo swapon -a

如果提示:

swapoff failed: Cannot allocate memory

说明内存不够,不能这样做。


三、临时缓解方法(推荐)

方法 1:杀掉占用 swap 的进程

for file in /proc/*/status; do
  awk '/VmSwap|Name/{printf "%s %s\n", $2, $1}' $file
done | sort -k2 -n

找到占用 swap 最多的进程后:

kill -9 PID

方法 2:临时增加 swap(最安全)

如果磁盘还有空间:

sudo fallocate -l 2G /swapfile2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon /swapfile2

查看:

swapon --show

不用时删除:

sudo swapoff /swapfile2
sudo rm /swapfile2

四、长期解决方案(根本问题)

1️⃣ 增加物理内存(最根本)

如果是常年 swap 满 → 内存真的不够


2️⃣ 调整 swappiness(减少 swap 使用)

cat /proc/sys/vm/swappiness

默认通常是 60,可改成 10:

sudo sysctl vm.swappiness=10

永久生效:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

3️⃣ 增大 swap 分区 / 文件

编辑 /etc/fstab,或新建更大的 swapfile


4️⃣ 限制或优化程序

  • Java / Docker / MySQL 容易吃内存
  • 设置内存上限(如 Docker --memory)
  • 优化数据库缓存

五、常见导致 swap 满的原因

原因 说明
内存不足 最常见
内存泄漏 程序异常
swappiness 太高 过早使用 swap
大量小文件读写 缓存占用
Docker / K8s 默认不限制内存

六、一句话总结

swap 满 ≠ swap 问题,而是内存问题
临时靠加 swap / 杀进程,长期靠加内存 / 优化程序。

如果你愿意,可以贴一下:

free -h
swapon --show

我可以帮你具体判断是哪种情况。

0 踩