CentOS 中与 swapper 相关的常见问题可分为三类:Swap 占用异常或性能下降、Swap 未启用或无法挂载、以及内核日志出现 “scheduling while atomic: swapper” 等严重错误。下面给出可操作的排查与修复步骤。
一、快速定位与通用排查
free -h、swapon --show、cat /proc/swaps,确认 Swap 总量、已用与设备/文件是否生效。for i in $(ls /proc | grep "^[0-9]"); do awk '/Swap:/{a+=$2} END{print $i, a/1024 "M"}' /proc/$i/smaps 2>/dev/null; done | sort -k2nr | head,定位异常进程并决定优化或终止。sudo sysctl vm.swappiness=10(范围 0–100,值越低越倾向少用 Swap,常用 10–30)。vm.swappiness=10,执行 sudo sysctl -p 生效。/swapfile swap swap defaults 0 0 或 /dev/sdXY none swap sw 0 0),随后执行 sudo swapon -a 测试。journalctl -xe、dmesg | grep -i swap、journalctl -b -1 | grep -i swap,捕捉设备不可用、挂载失败、内存分配失败等线索。top/htop、vmstat 1、iostat -x 1,判断是否因物理内存不足或磁盘 I/O 瓶颈导致性能问题。二、典型场景与解决方案
Swap 占用过高导致系统变慢
free -h 显示 Swap 使用率接近 100%,iostat 观察到 swap 读写高。vm.swappiness(如设为 10)以减少换出。Swap 未启用或重启后不自动挂载
free -h 显示 Swap 为 0;手动 swapon 报错或 swapon -a 失败。sudo swapon -a 启用所有 fstab 中的 Swap;必要时用 blkid 获取 UUID,在 fstab 中使用 UUID=... 提升稳定性。mkswap 且权限为 600。调整或重建 Swap 的大小与介质
sudo fallocate -l 8G /swapfile(或 dd if=/dev/zero of=/swapfile bs=1M count=8192)sudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile/swapfile swap swap defaults 0 0sudo swapoff /swapfiletruncate -s 4G /swapfile 或重建),再 mkswap 与 swaponrm -f /swapfileswapon /dev/mapper/VolGroup-lv_swap 或 swapon /dev/sdXY;在 fstab 中优先使用 UUID 或 LABEL 提高可移植性。sudo modprobe zramecho lz4 > /sys/block/zram0/comp_algorithmecho 4G > /sys/block/zram0/disksizemkswap /dev/zram0 && swapon /dev/zram0SSD 上 Swap 磨损或性能不佳
vm.swappiness,并持续监控写入量与健康状态。三、系统无法正常启动或内核报错的处理
ro 改为 rw,行尾添加 init=/bin/bash,删除 rhgb quiet,按 Ctrl+X 启动;进入后可修正 /etc/fstab、swapoff/swapon、sysctl 等。dmesg | grep -i "scheduling while atomic",若日志指向特定驱动/模块,优先升级或回退该驱动;若为自研模块,避免在原子上下文调用会睡眠的函数。fsck;用 smartctl -a /dev/sda 检查磁盘健康;必要时对内存做 memtest86+ 检测。四、预防性配置与最佳实践
pri= 调整多 Swap 优先级。vm.swappiness:桌面/交互式负载建议 10–30;内存密集型服务依据延迟与稳定性权衡(数据库等可适度提高)。free、vmstat、iostat、journalctl 中与 Swap 相关的异常;对 SSD 场景监控写入寿命与健康度。