Swap空间不足时可按五种方式调整:一、Swap文件扩容;二、LVM逻辑卷扩容;三、替换为更大Swap分区;四、谨慎缩减Swap文件;五、验证状态与持久性,确保重启后生效。

如果您已配置Swap分区但发现容量不足,导致系统在高负载时出现内存抖动或服务响应迟缓,则需调整现有Swap空间大小。以下是针对不同底层实现方式的多种调整方法:
一、通过Swap文件扩容(推荐用于无LVM环境)
该方法无需修改磁盘分区结构,适用于物理分区已满、仅能通过文件方式扩展Swap的场景,操作安全且可逆。
1、停用当前Swap文件:sudo swapoff /usr/swap/swapfile
2、备份原Swap文件(可选):sudo cp /usr/swap/swapfile /usr/swap/swapfile.bak
3、使用dd命令扩展文件至目标大小(例如扩至8GB):sudo dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=8192 conv=notrunc
4、重新设置权限:sudo chmod 0600 /usr/swap/swapfile
5、重新格式化为Swap类型:sudo mkswap /usr/swap/swapfile
6、重新启用:sudo swapon /usr/swap/swapfile
7、验证结果:free -h | grep Swap
二、通过LVM逻辑卷扩容Swap(适用于LVM环境)
当Swap已部署为LVM逻辑卷时,可直接扩展LV容量并刷新Swap设备,避免文件系统碎片与I/O性能损耗,适合生产服务器长期运行场景。
1、确认当前Swap逻辑卷路径:swapon --show=NAME,TYPE,SIZE | grep swap
2、停用Swap逻辑卷(假设路径为/dev/mapper/klas-swap):sudo swapoff /dev/mapper/klas-swap
3、扩展逻辑卷容量(例如增加4GB):sudo lvextend -L +4G /dev/mapper/klas-swap
4、重新格式化该逻辑卷为Swap:sudo mkswap /dev/mapper/klas-swap
5、重新启用:sudo swapon /dev/mapper/klas-swap
6、检查fstab中对应条目是否仍指向该设备路径,确保开机挂载有效
三、替换Swap设备:删除旧Swap并新建更大容量Swap分区
当原有Swap位于独立小容量分区(如/dev/sda3),且磁盘存在未分配空间时,可通过新建更大分区并迁移Swap来彻底更新容量,适用于需要释放旧分区或统一规划存储布局的情形。
1、停用当前Swap设备:sudo swapoff -a
2、确认旧Swap分区路径:cat /proc/swaps | awk 'NR>1 {print $1}'
3、使用fdisk或parted在空闲空间创建新分区(例如/dev/sda4),并设置分区类型为82(Linux swap)
4、格式化新分区:sudo mkswap /dev/sda4
5、启用新Swap:sudo swapon /dev/sda4
6、编辑/etc/fstab,注释或删除旧Swap行,新增:/dev/sda4 swap swap defaults 0 0
7、执行sudo swapon --all --verbose验证fstab加载效果
四、缩减Swap文件大小(谨慎操作)
当系统内存显著增加、原有Swap文件过大造成磁盘空间浪费时,可安全缩减Swap文件,但必须确保缩减后容量不低于物理内存的50%,且系统当前未发生Swap写入活动。
1、检查Swap使用率:free -h && cat /proc/swaps
2、确认无活跃Swap使用:sudo swapoff /usr/swap/swapfile
3、使用truncate命令精确截断文件(例如缩至2GB):sudo truncate -s 2G /usr/swap/swapfile
4、重设权限:sudo chmod 0600 /usr/swap/swapfile
5、重新格式化:sudo mkswap /usr/swap/swapfile
6、重新启用:sudo swapon /usr/swap/swapfile
五、验证调整后的Swap状态与持久性
无论采用哪种扩容或缩容方式,均需验证系统重启后Swap是否按预期自动激活,防止因fstab配置错误或设备路径变更导致Swap失效。
1、执行sudo systemctl daemon-reload刷新系统服务配置
2、运行sudo swapon --show确认当前启用设备及大小
3、检查/etc/fstab中Swap条目是否语法正确、设备路径存在且UUID未变更
4、手动触发一次内核参数重载(可选):sudo sysctl vm.swappiness=60
5、关键验证步骤:执行sudo reboot -f后,在系统启动完成立即运行free -h,确认Swap total值与设定一致且state为active

















