在 Debian 系统中,swapper(swap)占用高通常不是“swapper 进程本身”导致的,而是系统内存不足、频繁使用 swap 的表现。下面我按排查 → 原因 → 解决给你一个完整方案。
free -h
关注:
Swap: 2G 1.8G 200M
如果 used 接近 total,说明 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
kswapd0 进程 CPU 占用高sudo sysctl vm.swappiness=10
(默认是 60,越低越不喜欢用 swap)
永久生效
sudo nano /etc/sysctl.conf
添加:
vm.swappiness=10
top
htop
重点看:
RESMEM%swapon --show
| 内存 | swap |
|---|---|
| ≤ 2G | 2×内存 |
| 2–8G | 等于内存 |
| ≥ 8G | 4–8G |
sudo swapoff -a
sudo swapon -a
这是 swap 频繁换入换出 的表现。
innodb_buffer_pool_sizels -lh /swapfile
swapon --show
sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
✅ 正常现象
❌ 需要干预
| 情况 | 建议 |
|---|---|
| 内存小 | 加内存 |
| swappiness 高 | 调低 |
| 某进程异常 | 重启 / 限制 |
| 数据库 | 调内存参数 |
| 临时缓解 | swapoff + swapon |
free -h 输出把下面任意一个贴出来即可:
free -h
top