温馨提示×

ubuntu swapper怎样调试

小樊
45
2026-09-21 21:07:10
栏目: 智能运维

在 Ubuntu(以及其他 Linux 发行版)里,swapper 通常指 内核交换子系统(swap / swapper 进程,PID 0 或 kswapd),或者是 swap 空间配置与使用问题。下面从「调试思路 + 常用命令 + 典型问题」三部分说明。


一、先明确你在调试什么

常见“swapper 调试”场景:

  1. 系统大量使用 swap,导致卡顿
  2. kswapd 占用 CPU 高
  3. swap 没生效 / swapon 失败
  4. OOM(内存耗尽)与 swap 的关系
  5. 内核级 swap 行为(高级)

二、基础排查命令(最常用)

1. 查看 swap 状态

swapon --show
free -h
cat /proc/swaps

2. 查看内存 & swap 使用

top
htop
vmstat 1

关注:

  • si / so(swap in/out)
  • wa(I/O wait)

3. 查看是哪个进程在用 swap

sudo apt install smem
smem -s swap -r | head

或:

for f in /proc/*/status; do
  awk '/VmSwap|Name/{printf "%s ", $2} END{print ""}' "$f"
done | sort -k2 -n

三、调试 swapper / kswapd 行为

1. 查看 kswapd 是否在忙

top -p $(pgrep kswapd)

如果 CPU 高:

  • 说明内存压力很大
  • 或磁盘 IO 慢(swap 在慢盘)

2. 查看内核 swap 参数

cat /proc/sys/vm/swappiness
cat /proc/sys/vm/vfs_cache_pressure
cat /proc/sys/vm/min_free_kbytes

调整示例(临时):

sudo sysctl vm.swappiness=10

永久:

/etc/sysctl.conf
vm.swappiness=10

3. 查看 OOM 与 swap 关系

dmesg | grep -i oom
dmesg | grep -i kill

四、常见 swap 问题调试

问题 1:swap 没生效

swapon --show

如果没有:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

开机自动:

/swapfile none swap sw 0 0

问题 2:kswapd 占 CPU 高

可能原因:

  • 内存太小
  • swappiness 太高
  • swap 在 HDD 上

解决:

vm.swappiness=10

或加内存 / 用 zram


问题 3:Ubuntu 22.04+ 使用 zram

swapon --show

可能看到:

/dev/zram0

调试:

sudo systemctl status systemd-zram-setup@zram0

五、高级(内核级调试)

1. 打开 swap 相关内核日志

sudo sysctl vm.block_dump=1
dmesg -w

2. ftrace(高级)

sudo trace-cmd record -e vmscan

六、推荐调试流程(总结)

  1. free -h 看 swap 是否用
  2. vmstat 1 看 si/so
  3. smem 找 swap 大户
  4. dmesg 看 OOM
  5. swappiness
  6. 决定是否加内存 / zram

如果你能说清楚:

  • Ubuntu 版本
  • 桌面还是服务器
  • 具体现象(卡顿 / OOM / kswapd 高)

我可以给你更针对性的调试方案

0