在 CentOS(以及其它 Linux 发行版)里,swapper / swap 空间“满”通常不是指某个叫 swapper 的进程占满了,而是swap 分区(或 swap 文件)被用满了。下面分几方面说清楚原因和排查方法。
swapper 是内核里负责**交换内存(swap)**的机制(早期叫 swapper 进程,现在基本是内核线程)。swap used = 100%free -h 里 Swap 的 used 很大,available 很小当 RAM 不够用时,内核会把不活跃的内存页换到 swap。
表现:
free -h
常见于:
CentOS 默认:
cat /proc/sys/vm/swappiness
如果设成 60~100,即使内存还有,也可能用 swap。
某些进程:
排查:
top
# 或
ps aux --sort=-%mem
这是正常现象,不代表现在有问题。
例如:
innodb_buffer_pool_size 太大free -h
swapon -s
for pid in $(ls /proc | grep '^[0-9]'); do
if [ -f /proc/$pid/status ]; then
swap=$(awk '/VmSwap/{print $2}' /proc/$pid/status)
if [ "$swap" != "" ] && [ "$swap" -gt 0 ]; then
name=$(awk '/Name/{print $2}' /proc/$pid/status)
echo "$pid $name $swap KB"
fi
fi
done | sort -k3 -n -r
swapoff -a
swapon -a
⚠️ 前提:RAM 足够,否则会 OOM
sysctl vm.swappiness=10
# 永久
echo "vm.swappiness=10" >> /etc/sysctl.conf
# 增加 swap 文件示例
dd if=/dev/zero of=/swapfile bs=1G count=4
mkswap /swapfile
swapon /swapfile
--memoryMemoryMax=CentOS 的 “swapper 满” 本质是 swap 被用满,绝大多数情况是 内存不够 + swappiness 偏高 + 长期运行不释放 导致。
如果你愿意,可以贴一下:
free -hswapon -stop 前几行我可以帮你精确判断是哪一类问题。