Ubuntu Swap使用常见问题及解决方法
现象:系统物理内存充足但未启用Swap,或Swap使用率始终为0。
解决方法:
/etc/sysctl.conf文件,添加或修改vm.min_free_kbytes = 250000(设置系统保留的最小空闲内存,避免过早使用Swap),重启系统使更改生效。/etc/fstab中Swap分区配置正确(如UUID=xxxx none swap sw 0 0),若未配置,可通过sudo blkid获取Swap分区UUID,添加对应行并保存,重启后自动挂载。现象:系统频繁使用Swap,导致运行缓慢(如打开应用延迟、系统卡顿)。
解决方法:
sudo sysctl vm.swappiness=10(如设为10,表示物理内存使用超过90%时才启用Swap);永久修改:编辑/etc/sysctl.conf,添加vm.swappiness=10,运行sudo sysctl -p使更改生效。sudo fallocate -l 4G /swapfile # 创建4GB Swap文件(可根据需求调整大小)
sudo chmod 600 /swapfile # 设置文件权限(仅root可读写)
sudo mkswap /swapfile # 格式化为Swap文件
sudo swapon /swapfile # 启用Swap文件
永久生效:编辑/etc/fstab,添加/swapfile none swap sw 0 0。fdisk或GParted工具创建新分区,格式化为Swap(sudo mkswap /dev/sdXY,XY为分区标识),启用(sudo swapon /dev/sdXY),并更新/etc/fstab。现象:Swap使用率接近100%,系统响应极慢甚至无响应。
解决方法:
for proc in $(find /proc -maxdepth 1 -type d -regex "/proc/[0-9]"); do
pid=$(basename $proc)
cmd=$(cat $proc/cmdline 2>/dev/null | tr '\0' ' ')
swap=$(awk '/VmSwap/ {print $2}' $proc/status 2>/dev/null)
if [ "$swap" != "" ] && [ "$swap" -gt 0 ]; then
echo "PID: $pid Swap: $swap KB CMD: $cmd"
fi
done | sort -k4 -n -r | head -10
优化高占用进程(如关闭不必要的应用、重启异常进程)。sudo sync(同步磁盘缓存),再执行sudo sysctl vm.drop_caches(释放页缓存、目录项和inode缓存),腾出物理内存。现象:手动启用Swap时报错(如swapon: /dev/sdXY: Operation not permitted),或free -h显示Swap为0。
解决方法:
linux-swap类型(使用sudo mkswap /dev/sdXY重新格式化)。sudo umount /dev/sdXY),再启用Swap。/etc/fstab配置:确认Swap分区条目无误(如UUID或设备名正确),若配置错误,修改后保存并重启系统。sudo fsck /dev/sdXY修复(需先卸载分区)。现象:使用GParted扩容Swap分区后,运行sudo systemctl hibernate报错(如Failed to hibernate system via logind)。
解决方法:
/etc/fstab:将Swap分区的UUID替换为最新值(通过sudo blkid获取),保存后重启。/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"后添加resume=UUID=xxxx(xxxx为Swap分区UUID),运行sudo update-grub更新GRUB,重启系统。现象:Swap出现问题但无法定位原因(如频繁崩溃、性能骤降)。
解决方法:
journalctl查看系统日志,过滤Swap相关错误:sudo journalctl -xe | grep -i swap。/var/log/syslog文件,查找Swap故障记录:grep -i swap /var/log/syslog。