温馨提示×

centos swapper故障排除有哪些方法

小樊
34
2025-12-05 19:08:18
栏目: 智能运维

CentOS Swapper 故障排查与修复指南

一 快速定位与基础检查

  • 查看内存与 Swap 总体状态:free -h,关注 Swap 已用/总量available 字段,判断是否因内存不足导致频繁换入换出。
  • 查看已启用的 Swap:swapon --show,若无输出说明 Swap 未启用或激活失败。
  • 检查磁盘空间:df -h,确保根分区或 Swap 所在分区有充足可用空间
  • 检查系统日志:journalctl -xedmesg | 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/sdXYswapon /swapfile 失败 确认分区已用 mkswap 初始化;确保未重复激活;文件系统错误时先修复后再启用。
内核日志出现 “swapper: page allocation failure” dmesg 可见 swapper/0 分配失败 视情况调整 vm.zone_reclaim_mode=1 缓解 NUMA/Zone 回收导致的分配失败(需评估业务影响)。
“scheduling while atomic: swapper” 内核错误 dmesg 出现该告警,可能伴随崩溃或不稳定 定位触发的内核函数/驱动,升级相关驱动或内核,避免在原子上下文调用会睡眠的函数。

三 深入排查与修复步骤

  • 定位高占用 Swap 的进程
    • 交互式:top/htopShift+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
      
  • 调整 Swap 使用倾向
    • 临时:sudo sysctl vm.swappiness=10(范围 0–100,值越低越倾向少用 Swap)。
    • 永久:在 /etc/sysctl.conf 添加 vm.swappiness=10,执行 sudo sysctl -p 生效。
  • 校验并修复自动挂载
    • 校验:cat /etc/fstab,示例条目:
      • 分区:/dev/sda2 none swap sw 0 0
      • 文件:/swapfile none swap sw 0 0
    • 测试:sudo swapon -a;重启后再次 swapon --show 确认。
  • 修复疑似损坏的 Swap 分区/文件
    • 关闭 Swap:sudo swapoff /dev/sdXYsudo swapoff /swapfile
    • 检查分区:sudo fsck /dev/sdXY(务必在离线状态执行,先备份重要数据)。
    • 重新初始化并启用:sudo mkswap /dev/sdXYsudo mkswap /swapfile,再 sudo swapon /dev/sdXYsudo swapon /swapfile
  • 处理 “swapper: page allocation failure”
    • 临时缓解:sudo sysctl -w vm.zone_reclaim_mode=1,观察是否改善;该参数会影响 NUMA/Zone 的内存回收策略,需结合业务评估。
  • 系统无法正常启动时的离线修复(单用户/救援模式)
    • CentOS 6:GRUB 编辑内核行,末尾添加 single,启动进入单用户。
    • CentOS 7:GRUB 将 ro 改为 rw,行尾添加 init=/bin/bash,启动进入单用户。
    • 救援模式:使用安装介质选择 Rescue,挂载原系统根分区(如 /mnt/sysimage),修正 /etc/fstabmkswap/swapon 等后再重启。

四 优化与预防建议

  • 规划合理的 Swap 容量:物理内存较大(如 ≥16GB)且非内存敏感场景,可适当降低 Swap 或设为文件形式便于调整;内存紧张或存在突发峰值的应用,建议配置足量 Swap 并优化应用内存使用。
  • 提升 Swap 性能:优先将 Swap 文件/分区 放在 SSD/NVMe 上;如使用文件,确保其所在文件系统健康并定期检查。
  • 降低不必要的 Swap 依赖:优化应用内存占用、关闭无用服务;必要时将 vm.swappiness 调整到 10–30 区间以平衡性能与稳定性。
  • 持续监控与告警:监控 Swap 使用率、si/so、可用内存 与关键进程内存曲线,异常时及时介入。
  • 保持系统与驱动更新:定期 sudo yum update,及时修复内核/驱动缺陷,减少与 Swap/内存管理相关的稳定性风险。

0