温馨提示×

Debian swapper为何一直运行

小樊
38
2026-06-30 22:20:38
栏目: 智能运维

Debian 下 swapper(通常是 kswapd0)一直运行,一般说明系统内存压力较大,内核在频繁做页面回收/交换。下面按「是什么 → 为什么会这样 → 如何排查 → 如何解决」来说明。


一、swapper / kswapd0 是什么?

  • swapperkswapd0 是 Linux 内核线程
  • 职责:
    • 当内存不足或内存碎片过多时
    • 回收 page cache / slab / 匿名页
    • 必要时把内存换出到 swap
  • 正常情况下:
    • 偶尔运行
    • CPU 占用接近 0%

如果你看到它 一直跑、CPU 占用高,说明系统不正常。


二、常见原因(按出现频率)

1️⃣ 内存不足(最常见)

  • 物理内存快用光
  • 内核不断尝试回收内存

检查:

free -h

关注:

  • available 很小
  • swap used 持续增长

2️⃣ 大量使用 swap

即使内存没完全用光,也可能:

  • 某些进程被换出
  • kswapd 不断尝试平衡内存

检查:

swapon -s
vmstat 1

如果 si/so 长期不为 0,说明在频繁换入换出。


3️⃣ 内存碎片严重(非常常见但容易被忽略)

  • 没有内存不足,但 连续内存不够
  • kswapd 会疯狂做内存规整(compaction)

特征:

  • free 很大
  • 但 kswapd0 占 CPU 很高

检查:

cat /proc/buddyinfo

碎片严重时,高阶内存很少。


4️⃣ 某个进程内存泄漏

  • Java / Python / Chrome / Docker
  • 慢慢吃完内存

排查:

top
# 或
ps aux --sort=-%mem | head

5️⃣ 透明大页(THP)+ 碎片

Debian 服务器上 THP 经常导致 kswapd0 高 CPU

检查:

cat /sys/kernel/mm/transparent_hugepage/enabled

如果是 always,很容易出问题。


6️⃣ ZFS / Docker / K8s 等特殊情况

  • ZFS ARC 占内存
  • Docker 容器内存限制不合理
  • kswapd 被反复触发

三、快速判断是哪种情况

✅ 看 CPU 和内存

top
# 或
htop
  • kswapd0 CPU 高 + 内存快满 → 内存不足
  • kswapd0 CPU 高 + 内存还很多 → 内存碎片 / THP

✅ 看有没有 swap 活动

vmstat 1
  • si/so 持续 > 0 → swap 问题
  • 全为 0 → 更可能是碎片

四、常见解决方案(按优先级)

✅ 1. 临时缓解(立刻生效)

降低 swap 使用倾向

sudo sysctl vm.swappiness=10

(默认通常是 60)


关闭透明大页(服务器强烈建议)

echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

永久生效(Debian):

sudo nano /etc/default/grub
# 在 GRUB_CMDLINE_LINUX 加:
transparent_hugepage=never
sudo update-grub

✅ 2. 增加内存或限制进程

  • 加内存(最根本)
  • 限制大内存进程:
systemctl set-property your.service MemoryMax=2G

✅ 3. 调整内存回收参数(进阶)

sudo sysctl vm.min_free_kbytes=524288

(单位 KB,不要乱设太大)


✅ 4. 检查是否有异常进程

ps aux --sort=-%mem | head

必要时重启或更新相关程序。


五、什么时候是“正常的”?

✅ 下面情况 不需要担心

  • kswapd0 偶尔出现
  • CPU 占用 < 1%
  • 系统不卡

❌ 下面情况 必须处理

  • kswapd0 长期占 CPU 20%+
  • 系统卡顿
  • swap 持续增长

六、如果你愿意,我可以帮你精确判断

你可以直接贴出:

free -h
vmstat 1 5
top -b -n1 | head -20
cat /proc/buddyinfo

我可以帮你判断 是内存不够、碎片、还是 THP 导致的 swapper 一直运行

0