CentOS Swapper 故障排查与修复指南
一 快速定位与基础检查
free -h,关注 Swap 已用/总量 与 available 字段,判断是否因内存不足导致频繁换入换出。swapon --show,若无输出说明 Swap 未启用或激活失败。df -h,确保根分区或 Swap 所在分区有充足可用空间。journalctl -xe 或 dmesg | tail -n 100,关注与 swap、swapon、mkswap、oom、page allocation failure 相关的报错。cat /etc/fstab,确认 Swap 条目格式正确(设备路径或 /swapfile、类型 swap、选项 sw/defaults、dump 与 pass 为 0 0)。二 常见症状与对应处理
| 症状 | 快速判断 | 处理要点 |
|---|---|---|
| Swap 占用过高、系统变慢 | free -h 显示 Swap 接近 100%;iostat 显示 si/so 持续较高 |
找出占用 Swap 最多的进程并优化/终止;临时降低 vm.swappiness=10;必要时增加物理内存或扩容 Swap。 |
| 重启后 Swap 未自动挂载 | swapon --show 为空;free -h Swap 为 0 |
校验并修正 /etc/fstab 条目;执行 swapon -a 测试;若设备名变更(如 /dev/sdX),更新为正确名称。 |
| 无法启用 Swap(报错或 device busy) | swapon /dev/sdXY 或 swapon /swapfile 失败 |
确认分区已用 mkswap 初始化;确保未重复激活;文件系统错误时先修复后再启用。 |
| 内核日志出现 “swapper: page allocation failure” | dmesg 可见 swapper/0 分配失败 |
视情况调整 vm.zone_reclaim_mode=1 缓解 NUMA/Zone 回收导致的分配失败(需评估业务影响)。 |
| “scheduling while atomic: swapper” 内核错误 | dmesg 出现该告警,可能伴随崩溃或不稳定 |
定位触发的内核函数/驱动,升级相关驱动或内核,避免在原子上下文调用会睡眠的函数。 |
三 深入排查与修复步骤
top/htop 按 Shift+M 按内存排序,识别异常进程并优化或终止。for i in $(ls /proc | grep -E '^[0-9]+'); do
awk '/Swap:/{s+=$2} END{printf "%s %.1fM\n", i, s/1024}' /proc/$i/smaps 2>/dev/null;
done | sort -k2nr | head
sudo sysctl vm.swappiness=10(范围 0–100,值越低越倾向少用 Swap)。vm.swappiness=10,执行 sudo sysctl -p 生效。cat /etc/fstab,示例条目:
/dev/sda2 none swap sw 0 0/swapfile none swap sw 0 0sudo swapon -a;重启后再次 swapon --show 确认。sudo swapoff /dev/sdXY 或 sudo swapoff /swapfilesudo fsck /dev/sdXY(务必在离线状态执行,先备份重要数据)。sudo mkswap /dev/sdXY 或 sudo mkswap /swapfile,再 sudo swapon /dev/sdXY 或 sudo swapon /swapfile。sudo sysctl -w vm.zone_reclaim_mode=1,观察是否改善;该参数会影响 NUMA/Zone 的内存回收策略,需结合业务评估。mkswap/swapon 等后再重启。四 优化与预防建议
vm.swappiness 调整到 10–30 区间以平衡性能与稳定性。sudo yum update,及时修复内核/驱动缺陷,减少与 Swap/内存管理相关的稳定性风险。