Debian 系统中 swapper(swap 占用)高,通常不是“swapper 本身”有问题,而是系统内存不足、内存分配策略或某些进程异常导致的。下面按常见原因 → 排查方法 → 解决方案来说明。
在 top / htop 里看到的:
swapper/0
不是占用 swap 的进程,而是内核空闲线程(idle task),它不消耗内存,也不该背锅。
真正需要关注的是:
当 RAM 不够用 时,内核会把不常用的内存页换出到 swap。
检查:
free -h
关注:
Mem 的 availableSwap 的 used如果:
available 很小swap used 很大✅ 基本可以确认是内存不足
swappiness 控制内核“多积极使用 swap”。
Debian 默认一般是 60,服务器建议调低。
查看:
cat /proc/sys/vm/swappiness
建议值:
临时修改:
sudo sysctl vm.swappiness=10
永久生效:
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
即使你没跑“大程序”,也可能有:
排查:
top
# 或
htop
按 内存排序(Shift + M)
重点看:
RESSHR%MEM如果你用了 ZFS:
检查:
arcstat
# 或
cat /proc/spl/kstat/zfs/arcstats
解决:
echo "options zfs zfs_arc_max=4294967296" | sudo tee /etc/modprobe.d/zfs.conf
日志占内存 + 被换出到 swap。
检查:
journalctl --disk-usage
限制:
sudo nano /etc/systemd/journald.conf
设置:
SystemMaxUse=200M
MaxRetentionSec=7day
重启:
sudo systemctl restart systemd-journald
如果你开启了 休眠功能,swap 会被预留一部分。
检查:
swapon --show
如果只是想用 swap 当“保险”,而不是休眠:
Linux 不会主动把 swap 换回内存,除非再次访问。
这是正常行为,不是 bug。
free -h
top
cat /proc/sys/vm/swappiness
swapon --show
journalctl --disk-usage
✅ 需要担心:
si/so(swap in/out)长期不为 0❌ 不需要担心:
Debian swap 占用高,99% 是因为 内存不够或 swappiness 不合理,而不是 swapper 本身的问题。
如果你愿意,可以贴出:
free -htop 前几行我可以帮你精确判断是哪一个原因。