“swap 占用高”通常说明系统内存不够用,开始频繁使用磁盘上的交换空间,这会明显拖慢系统。下面按排查 → 临时缓解 → 根本解决给你一套完整方案。
free -h
关注:
Swap 的 used 是否很大Mem 的 available 是否很小top
# 或
htop
按内存排序(top 里按 M)
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k2 -n -r | head -20
sudo swapoff -a
sudo swapon -a
⚠️ 风险:如果内存不足会直接 OOM
cat /proc/sys/vm/swappiness
默认通常是 60,可以调低:
sudo sysctl vm.swappiness=10
永久生效:
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
解决方式:
例如 Docker:
--memory=512m --memory-swap=512m
常见嫌疑:
✅ 解决:
例如 MySQL:
innodb_buffer_pool_size = 60% 内存
Elasticsearch:
-Xms 和 -Xmx 不要超过 50% 内存
有些云厂商:
✅ 建议:
| 场景 | 建议 |
|---|---|
| 内存充足 | 可关闭 |
| 内存紧张 | 必须保留 |
| 数据库服务器 | 通常建议保留但调低 swappiness |
| 桌面 / 开发机 | 保留 |
swap 高 + 内存很满 → 内存不足
swap 高 + 内存还有 → swappiness 问题
swap 高 + 某进程异常 → 程序问题
如果你愿意,可以把下面信息发我,我可以精准定位:
free -h 输出top / htop 截图我可以直接帮你算该加多少内存、怎么调参数。