Ubuntu Swapper故障排查与解决方法

作者:袖梨 2026-07-29

Ubuntu Swapper故障排查与解决

Ubuntu Swapper故障如何排查解决

一 快速判断与定位

  • 辨别与“swapper”有关的现象:
    • 加密Swap配置存在问题或解锁失败时,启动过程往往会反复要求输入加密交换分区密码,也可能停留在“a start job is running for dev-mapper-cryptswap1.device (no limit)”。
    • 磁盘/存储发生异常或严重延迟,容易让I/O持续阻塞系统空闲线程;内核日志此时会记录“INFO: task swapper:1 blocked for more than 120 seconds”。
    • Swap没有投入使用,而系统可用内存已降至极低水平,需考虑配置错误、策略过于保守或尚未启用。
  • 快速检查清单:
    • 查看是否启用Swap:sudo swapon --show;未显示则未激活。
    • 检查内存和Swap整体情况:free -h;“available”接近0与否需要关注。
    • 核查磁盘空间:df -h;根分区或Swap所在分区不可缺少充足的剩余空间。
    • 查看系统日志:sudo journalctl -xe | grep -i swapper,或grep -i swap /var/log/syslogdmesg | grep -i swapper,定位挂载失败、权限错误、设备不存在等具体原因。

二 常见故障与修复步骤

  • 启动阶段卡住并反复要求输入加密Swap密码
    • 进入救援/单用户:重启,长按Shift进入GRUB,选择“Advanced options for Ubuntu”→“Recovery mode”→“Drop to root shell”。
    • 若要临时绕过故障项,可编辑/etc/fstab,把加密Swap相关行注释掉(如/dev/mapper/cryptswap1 none swap sw 0 0),保存以后执行reboot以便先让系统恢复可用。
    • 重建加密Swap(示例为1G):
      • sudo swapoff -a
      • sudo fallocate -l 1G /swapfile
      • sudo chmod 600 /swapfile
      • sudo mkswap /swapfile
      • sudo swapon /swapfile
      • /etc/fstab添加:/swapfile none swap sw 0 0
      • 按发行版指引重新配置加密Swap(如/etc/crypttab),然后再update-initramfs -u并对其进行更新/etc/fstab相应条目。
  • Swap未启用或容量异常
    • 启用指定分区:sudo swapon /dev/sdXY;或启用全部:sudo swapon -a(依赖/etc/fstab正确)。
    • 若分区损坏或不存在,重建:
      • sudo swapoff -a
      • 对分区:sudo mkswap /dev/sdXY;对文件:sudo mkswap /swapfile
      • sudo swapon /dev/sdXYsudo swapon /swapfile
    • 检查/etc/fstab中的条目是否无误,包括设备路径或UUID;如有错误,修正后再swapon -a进行测试。
  • “swapper blocked for more than 120 seconds”出现在内核日志中
    • 应先检查底层I/O,包括存储离线或严重延迟、RAID异常、宿主机资源不足等情况;必要时检查阵列健康,并重启宿主机或存储。
    • 仅在确认脏页回写是诱因时,可把脏页阈值调小作为临时缓解措施(示例值):vm.dirty_background_ratio=5vm.dirty_ratio=10,随后执行sysctl -p;在生产环境中需要谨慎评估。
  • 系统可用内存已很低,Swap仍迟迟没有启用
    • 可适度调低vm.swappiness(默认60):先查看cat /proc/sys/vm/swappiness;临时设置sysctl vm.swappiness=10;永久设置则写入/etc/sysctl.confvm.swappiness=10
    • 内核保留空闲内存阈值可适度提高,在(示例250000 KB):/etc/sysctl.conf中添加vm.min_free_kbytes=250000并重新启动,使Swap更早触发,避免内存紧张时出现卡顿。

三 验证与优化

  • 确认修复效果:
    • swapon --show应当可以看到Swap设备或文件及其容量;free -h其中Swap“used”会随负载上升;journalctl -xe | grep -i swapper不再出现挂载失败或I/O阻塞错误。
  • 优化性能和稳定性:
    • 合理配置vm.swappiness:内存<8GB建议10–30;内存>为减少不必要的Swap抖动,8GB建议≤10**。
    • 适当设置vm.min_free_kbytes(如250000),避免直到空闲内存极低时才触发Swap而引起卡顿。
    • 保持系统与内核更新:sudo apt update && sudo apt upgrade,必要时安装新版内核linux-generic,修复已知Swap/存储相关缺陷。

四 应急与数据保护

  • 无法进入系统时可采用以下应急路径:
    • 先由Live USB启动并挂载原系统分区,重要数据完成备份后,再对文件系统进行检查和修复(fsck,检查修复时不可挂载),完成后再修正并按上文重建Swap/etc/fstab
    • 若引导异常,可在Live环境中重装GRUB:sudo grub-install /dev/sdXsudo update-grub,然后重启。

相关文章

精彩推荐