温馨提示×

Ubuntu Swapper:如何诊断交换分区问题

小樊
45
2025-12-18 00:02:14
栏目: 智能运维

Ubuntu Swapper 交换分区问题诊断流程

一 快速体检

  • 查看内存与交换概况:运行命令:free -h,关注 Swap 行的 total/used/free,判断是否已启用及使用量是否异常。
  • 查看已启用的交换:运行命令:swapon --showcat /proc/swaps,确认交换设备或文件是否存在、大小与优先级。
  • 实时观察资源与换页:运行命令:top/htop(查看 Swap 行)、vmstat -s | grep swap(交换总量与使用量)、vmstat 1(观察 si/so 是否持续不为 0,表示换入/换出活跃)。
  • 检查内核与系统日志:运行命令:dmesg | grep -i swap(内核层面的交换相关提示)、journalctl -b | grep -i swap(本次启动的交换相关日志)。
    以上命令能快速判断“是否有交换、是否被使用、是否有报错”,是后续定位的基础。

二 常见症状与定位

  • 症状一:交换未启用或“总量为 0”
    1. 执行:swapon --showcat /proc/swaps,若为空,说明未启用。
    2. 检查设备/文件是否存在:分区用 sudo blkid,交换文件确认路径与权限。
    3. 启用:分区用 sudo swapon /dev/sdXN;文件用 sudo swapon /swapfile
    4. 持久化:编辑 /etc/fstab,使用正确的 UUID(推荐)或路径,例如:
      • 分区:UUID=xxxx none swap sw 0 0
      • 文件:/swapfile none swap sw 0 0
    5. 验证:free -hswapon --show 应显示正常。
  • 症状二:开机卡在 “A start job is running for /dev/disk/by-uuid/xxxxx”(约 1分30秒
    1. 比对 /etc/fstab 中的 swap UUIDsudo blkid 输出是否一致。
    2. 不一致则修正 /etc/fstab 中的 UUID;如暂时无法修复,可先注释该行以恢复正常启动,再后续处理。
  • 症状三:系统卡顿但 Swap 使用为 0
    1. 检查 vm.swappinesscat /proc/sys/vm/swappiness(默认常见为 60)。
    2. 临时调整:sudo sysctl vm.swappiness=10(倾向少用 swap,仅在内存紧张时再用)。
    3. 永久生效:在 /etc/sysctl.conf 中添加或修改 vm.swappiness=10 并重启或 sysctl -p
  • 症状四:怀疑交换文件损坏或大小不当
    1. 关闭全部交换:sudo swapoff -a
    2. 备份后删除旧文件,重建(示例 2G):
      • 创建:sudo fallocate -l 2G /swapfile(若失败可用 dd if=/dev/zero of=/swapfile bs=1M count=2048
      • 设权限:sudo chmod 600 /swapfile
      • 格式化:sudo mkswap /swapfile
      • 启用:sudo swapon /swapfile
    3. 写入 /etc/fstab:/swapfile none swap sw 0 0
    4. 验证:free -hswapon --show
      以上步骤覆盖了“未启用、启动挂载失败、策略不当、文件损坏/大小不当”等高频场景。

三 深入分析与性能影响

  • 观察换页是否频繁:vmstat 1 持续出现 si/so > 0 表示内存紧张导致频繁换页,应结合业务与内存容量评估是否增加物理内存或调整 swappiness
  • 查看 I/O 压力:iostat -x 1 观察 await、svctm、util,若交换所在磁盘 util 长时间接近 100%,说明交换设备成为瓶颈,优先考虑更快的存储(如 SSD)或优化内存占用。
  • 关联进程与内存压力:top/htop 按内存占用排序,定位占用内存最多的进程,配合日志与业务排查异常行为。
    这些手段有助于判断“交换是否引发性能问题”以及“瓶颈在何处”。

四 实用命令清单

  • 状态与启用:
    • free -hswapon --showcat /proc/swapssudo swapon /dev/sdXNsudo swapon /swapfilesudo swapoff -a
  • 配置与持久化:
    • sudo blkid;编辑 /etc/fstab(示例:UUID=… none swap sw 0 0 或 /swapfile none swap sw 0 0)
  • 策略与内核:
    • cat /proc/sys/vm/swappinesssudo sysctl vm.swappiness=10;在 /etc/sysctl.conf 中设置 vm.swappiness
  • 日志与诊断:
    • dmesg | grep -i swapjournalctl -b | grep -i swapvmstat -s | grep swapvmstat 1iostat -x 1top/htop
      以上命令覆盖了诊断、启用/禁用、持久化配置、策略调优与性能分析的关键路径。

0