温馨提示×

Debian swapper占用高怎么办

小樊
39
2026-06-30 21:55:34
栏目: 智能运维

在 Debian 系统中,swapper(swap)占用高通常不是“swapper 进程本身”导致的,而是系统内存不足、频繁使用 swap 的表现。下面我按排查 → 原因 → 解决给你一个完整方案。


一、先确认是不是真的 swap 占用高

1️⃣ 查看 swap 使用情况

free -h

关注:

Swap:   2G   1.8G   200M

如果 used 接近 total,说明 swap 使用严重。


2️⃣ 查看哪些进程在用 swap

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

或者更直观:

smem -t -k

二、常见原因 & 对应解决方案


✅ 原因 1:物理内存不足(最常见)

表现

  • swap 使用持续高
  • 系统变慢
  • kswapd0 进程 CPU 占用高

解决方案

✅ 临时减少 swap 使用倾向

sudo sysctl vm.swappiness=10

(默认是 60,越低越不喜欢用 swap)

永久生效

sudo nano /etc/sysctl.conf

添加:

vm.swappiness=10

✅ 增加内存(推荐)

  • 物理机:加内存条
  • 虚拟机:调大 RAM
  • 容器:调整 memory limit

✅ 原因 2:某个进程内存泄漏 / 吃内存

排查

top
htop

重点看:

  • RES
  • MEM%

解决

  • 重启该进程
  • 升级软件
  • 限制内存(systemd / cgroup)

✅ 原因 3:swap 分区太小或太大都不合理

查看 swap 类型

swapon --show

调整 swap 大小建议

内存 swap
≤ 2G 2×内存
2–8G 等于内存
≥ 8G 4–8G

临时关闭 swap(⚠️ 内存要够)

sudo swapoff -a
sudo swapon -a

✅ 原因 4:kswapd0 占用 CPU 高(swap 抖动)

这是 swap 频繁换入换出 的表现。

解决

  1. 减少 swappiness(见上)
  2. 避免内存超卖
  3. 如果是数据库(MySQL / PostgreSQL):
    • 减少 innodb_buffer_pool_size
    • 不要让它吃光内存

✅ 原因 5:ZRAM / Swapfile 配置不当

查看 swap 文件

ls -lh /swapfile
swapon --show

删除并重建 swapfile(示例)

sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

三、是否“需要担心 swapper”?

正常现象

  • swap 有使用,但系统不卡

需要干预

  • swap 长期接近 100%
  • kswapd0 占 CPU
  • 程序 OOM 被杀

四、快速决策表

情况 建议
内存小 加内存
swappiness 高 调低
某进程异常 重启 / 限制
数据库 调内存参数
临时缓解 swapoff + swapon

五、如果你愿意,我可以:

  • 帮你分析 free -h 输出
  • 分析 top / htop 截图
  • 判断是不是数据库吃内存
  • 给你定制 swappiness & swap 大小方案

把下面任意一个贴出来即可:

free -h
top

0