温馨提示×

swap占用高怎么解决

小樊
35
2026-08-11 23:59:52
栏目: 编程语言

“swap 占用高”通常说明系统内存不够用,开始频繁使用磁盘上的交换空间,这会明显拖慢系统。下面按排查 → 临时缓解 → 根本解决给你一套完整方案。


一、先确认问题

1️⃣ 查看 swap 使用情况

free -h

关注:

  • Swapused 是否很大
  • Memavailable 是否很小

2️⃣ 查看哪些进程在吃内存

top
# 或
htop

按内存排序(top 里按 M

3️⃣ 查看 swap 被谁用

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k2 -n -r | head -20

二、临时缓解(应急)

✅ 1. 释放 swap(不推荐长期)

sudo swapoff -a
sudo swapon -a

⚠️ 风险:如果内存不足会直接 OOM


✅ 2. 降低 swap 使用倾向

cat /proc/sys/vm/swappiness

默认通常是 60,可以调低:

sudo sysctl vm.swappiness=10

永久生效:

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

三、根本解决方案(重点)

✅ 1. 内存不足(最常见)

解决方式:

  • 升级内存(最彻底)
  • 减少并发进程
  • 限制某些服务内存

例如 Docker:

--memory=512m --memory-swap=512m

✅ 2. 某个程序内存泄漏

常见嫌疑:

  • Java / Python / Node 服务
  • 数据库(MySQL、ES)
  • 缓存服务

✅ 解决:

  • 重启服务
  • 升级版本
  • 调整 JVM / 缓存参数

✅ 3. 数据库或缓存配置不合理

例如 MySQL:

innodb_buffer_pool_size = 60% 内存

Elasticsearch:

-Xms  -Xmx 不要超过 50% 内存

✅ 4. 云服务器 swap 被误用

有些云厂商:

  • 默认 swap 很小
  • 或磁盘是 HDD,swap 极慢

✅ 建议:

  • 优先加内存
  • 或改用 SSD
  • 或直接关闭 swap(内存充足时)

四、是否该关闭 swap?

场景 建议
内存充足 可关闭
内存紧张 必须保留
数据库服务器 通常建议保留但调低 swappiness
桌面 / 开发机 保留

五、快速判断总结

swap 高 + 内存很满 → 内存不足
swap 高 + 内存还有 → swappiness 问题
swap 高 + 某进程异常 → 程序问题

如果你愿意,可以把下面信息发我,我可以精准定位

  • free -h 输出
  • top / htop 截图
  • 服务器 / 桌面 / Docker / 云主机
  • 跑的是什么服务(MySQL / Java / Python / …)

我可以直接帮你算该加多少内存、怎么调参数。

0