在 CentOS(以及大多数 Linux 发行版)中,swapper(swap 进程,通常是 PID 0 或 kswapd0)占用高,通常不是“swapper 本身在吃 CPU”,而是系统在频繁进行内存回收 / 交换(swap)操作导致的现象。下面从原因、排查和解决方法三个角度说明。
swapper / kswapd0 是 内核线程当 物理内存不足 或 内存分配压力大 时,kswapd 会一直运行,表现为 CPU 占用高。
查看:
free -h
top
如果:
Mem 几乎用满Swap 使用量持续增长就说明内存不够。
CentOS 默认:
cat /proc/sys/vm/swappiness
# 通常是 30
如果设置成 60~100,系统会过早使用 swap,即使内存还有。
查看:
top
ps aux --sort=-%mem
free -h
swapon -s
ps aux --sort=-%mem | head
top -p 0
# 或
ps -eo pid,comm,%cpu | grep kswapd
vmstat 1
关注:
si / so(swap in/out)freewa(I/O 等待)dmesg | grep -i oom
dmesg | grep -i memory
# 临时
sysctl vm.swappiness=10
# 永久
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
swapoff -a
⚠️ 不建议在内存紧张时直接关
--memory=2g
-Xmx
echo never > /sys/kernel/mm/transparent_hugepage/enabled
CentOS 中 swapper / kswapd 占用高,本质是“内存不够或 swap 使用过度”导致内核疯狂回收内存。
如果你愿意,可以把下面信息发我,我可以帮你精确判断:
free -htop 前几行swapon -s