在 Debian(以及其它 Linux 发行版)里,swapper / kswapd / swap 占用高通常不是“swapper 进程本身吃资源”,而是系统开始大量使用 swap,表现出来的现象容易被误认为是“swapper 占用高”。下面分层说明原因和排查方法。
swapper(PID 0 / kswapd)是内核线程top 里 swapper 或 kswapd CPU 很高时,真实含义是:
系统内存不足,内核在频繁做内存回收 / swap 操作
free -h 中 Swap 使用率高free -h
Debian 默认 swappiness=60,偏向“早用 swap”
查看:
cat /proc/sys/vm/swappiness
如果服务器内存充足,可以调低:
sysctl vm.swappiness=10
永久生效:
echo "vm.swappiness=10" >> /etc/sysctl.conf
某些进程(Java / Python / 容器)慢慢吃光内存
查看谁在吃内存:
top -o %MEM
# 或
ps aux --sort=-%mem | head
例如:
没设 max_memory,会一直吃内存 → 触发 swap
检查:
swapon --show
内存快满时:
# 1. 看内存和 swap
free -h
# 2. 看谁吃内存
ps aux --sort=-%mem | head
# 3. 看 swap 使用详情
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf "%s %s\n", $2, $3}' $file
done | sort -k2 -n -r | head
✅ 内存不够 → 加 RAM / 限制服务内存
✅ swappiness 高 → 调低
✅ 程序泄漏 → 重启或修复
✅ 磁盘慢 → 用更快磁盘或 ZRAM
✅ 不需要 swap → 可临时关闭(不推荐长期)
swapoff -a
如果你愿意,可以贴一下:
free -htop 或 htop 截图我可以帮你精确判断是哪一种情况。