Ubuntu 交换空间不足的应对方案
一、先判断是否需要扩容
free -h、swapon --show。若 Swap 总量接近用尽 或频繁触发 OOM/应用崩溃,就需要扩容或优化。make -j$(nproc) 改为 make -j2~4),关闭不必要程序,释放内存后再继续。二、扩容 Swap 的推荐做法(优先使用 Swap 文件)
# 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
三、调整现有 Swap 文件大小
sudo swapoff /swapfilesudo rm /swapfile/swapfile 并启用、写入 /etc/fstab。sudo swapoff /swapfilesudo dd if=/dev/zero of=/swapfile bs=1G count=2 oflag=append conv=notruncsudo mkswap /swapfilesudo swapon /swapfilefree -h四、使用 Swap 分区时的扩容思路
sudo mkswap /dev/sdXN 和 sudo swapon /dev/sdXN 启用;/etc/fstab 中使用 UUID 方式持久挂载(可用 blkid 查询分区 UUID)。五、优化与注意事项
cat /proc/sys/vm/swappiness(默认常见为 60)sudo sysctl vm.swappiness=10echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.confwatch -n 1 free -h、htop 观察使用情况;若 swapon 失败,常见原因为未执行 mkswap 或权限非 600。