温馨提示×

ubuntu swap空间不够怎么办

小樊
38
2025-12-16 09:59:22
栏目: 云计算

Ubuntu 交换空间不足的应对方案

一、先判断是否需要扩容

  • 查看当前内存与交换使用情况:free -hswapon --show。若 Swap 总量接近用尽 或频繁触发 OOM/应用崩溃,就需要扩容或优化。
  • 交换不足常见影响:系统响应变慢、延迟增加、卡顿,应用出现内存不足错误,严重时可能导致服务中断或数据风险
  • 快速缓解(不改配置):临时降低并发(如将 make -j$(nproc) 改为 make -j2~4),关闭不必要程序,释放内存后再继续。

二、扩容 Swap 的推荐做法(优先使用 Swap 文件)

  • 步骤概览:创建文件 → 设置权限 → 格式化为 swap → 启用 → 验证 → 设置开机自启。
  • 示例(新增 8GB 交换文件):
    # 1) 创建 8GB 的交换文件(两种其一)
    sudo fallocate -l 8G /swapfile
    # 若 fallocate 失败,改用 dd:
    sudo dd if=/dev/zero of=/swapfile bs=1G count=8
    
    # 2) 仅 root 可读写
    sudo chmod 600 /swapfile
    
    # 3) 格式化为 swap 区域
    sudo mkswap /swapfile
    
    # 4) 启用
    sudo swapon /swapfile
    
    # 5) 验证
    free -h
    swapon --show
    
    # 6) 开机自动启用(如文件已存在,先备份原行)
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
    
  • 需要更大空间时,将 8G 替换为 16G 等目标值即可。上述做法适用于 Ubuntu 18.04/20.04/22.04/24.04 等版本。

三、调整现有 Swap 文件大小

  • 场景 A(直接替换为更大的新文件,最稳妥):
    1. 关闭现有交换:sudo swapoff /swapfile
    2. 删除旧文件:sudo rm /swapfile
    3. 按“第二部分”的步骤创建更大/swapfile 并启用、写入 /etc/fstab
  • 场景 B(就地扩容已有文件,进阶做法):
    1. 关闭交换:sudo swapoff /swapfile
    2. 扩容文件(示例增加 2GB):sudo dd if=/dev/zero of=/swapfile bs=1G count=2 oflag=append conv=notrunc
    3. 重新初始化 swap 头:sudo mkswap /swapfile
    4. 启用:sudo swapon /swapfile
    5. 验证:free -h
  • 风险提示:操作前确保有数据备份;扩容失败可能导致系统无法立即分配内存,建议在虚拟机快照控制台下操作。

四、使用 Swap 分区时的扩容思路

  • 调整分区大小比文件更复杂,通常需要:
    • 使用 GParted 等工具调整分区(需相邻未分配空间),或先缩小其他分区腾出空间;
    • 完成后执行 sudo mkswap /dev/sdXNsudo swapon /dev/sdXN 启用;
    • /etc/fstab 中使用 UUID 方式持久挂载(可用 blkid 查询分区 UUID)。
  • 若不熟悉分区操作,更推荐继续使用Swap 文件方案,步骤更简单、风险更低。

五、优化与注意事项

  • 调整内核交换倾向(swappiness):
    • 查看:cat /proc/sys/vm/swappiness(默认常见为 60
    • 临时降低(减少换出):sudo sysctl vm.swappiness=10
    • 永久生效:echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
  • 使用 SSD 存放 Swap 可显著提升性能;但需注意写入寿命,在机械盘或低寿命设备上应避免过大 Swap。
  • 若需要支持休眠(Hibernate),Swap 空间应不小于物理内存,且使用分区更稳妥(部分发行版/硬件组合对文件休眠支持不佳)。
  • 监控与排错:watch -n 1 free -hhtop 观察使用情况;若 swapon 失败,常见原因为未执行 mkswap权限非 600

0