给XEN和KVM虚拟的VPS添加swap分区,最稳妥的办法是使用swap文件而非独立分区,全程只需几条命令,内存1G的机器建议将swap设为1-2G,设置完成后可用free命令验证。
XEN和KVM虚拟架构对swap设置的影响
业内专家指出,XEN和KVM是目前VPS市场最常见的两种虚拟化方案,XEN虚拟化采用半虚拟化或全虚拟化模式,老款XEN VPS对swap文件的支持存在兼容性问题;KVM则是全虚拟化,对swap文件的支持更加完善,但近些年的XEN版本已能正常使用swap文件,操作流程和KVM基本一致。
先弄清楚你的VPS属于哪种虚拟化
购买VPS时商家会在产品页面标注虚拟化类型,如果没留意,可以用以下命令快速判断:
sudo dmidecode -s system-manufacturer sudo systemd-detect-virt
输出结果中能看到XEN、KVM或QEMU等字样,确认虚拟化类型后再动手配置,这点很重要,因为老款XEN架构的VPS内核可能不支持swap文件,遇到这种情况只能联系商家进行分区级别的swap配置。
XEN老架构VPS的特殊情况
如果你的VPS确认是XEN且创建swap文件后启用失败,输出swapon: swapfile: read swap header failed,说明内核不支持swap文件,此时需要改用swap分区方式,操作步骤如下:
- 执行
free -m查看当前内存和swap使用情况 - 使用
fdisk对未分配磁盘空间创建分区 - 将分区类型改为82(Linux swap)
- 执行
mkswap /dev/vdb1格式化swap分区 - 执行
swapon /dev/vdb1激活swap
据行业共识,XEN老架构VPS用户会在购买后第一时间遇到swap配置问题,这类问题通过上述分区方案基本都能解决。
低配VPS如何正确设置swap:三条命令完成配置
对于KVM虚拟的VPS,配置swap文件的过程很简单,低配VPS通常只有512M或1G内存,运行宝塔面板或LNMP环境后内存吃紧,配置swap是提升稳定性的关键步骤。
第一步:确认当前swap状态
先登录服务器,执行以下命令查看系统当前swap情况:
free -h
如果Swap一栏全为0,说明系统没有启用swap,再执行swapon --show确认是否有swap设备或文件处于激活状态,如果命令无任何输出,就可以开始配置了。
第二步:创建swap文件
推荐使用fallocate命令创建swap文件,速度快且不易产生磁盘碎片,以创建1G swap文件为例,执行:
sudo fallocate -l 1G /swapfile
部分文件系统不支持fallocate,改用dd命令:
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
设置文件权限为仅root可读写,防止普通用户获取swap文件内容造成安全隐患:
sudo chmod 600 /swapfile
将文件格式化为swap格式并启用:
sudo mkswap /swapfile sudo swapon /swapfile
执行swapon --show验证,输出内容中能看到/swapfile的条目,说明swap文件已成功加载。
第三步:设置开机自动挂载
重启后swap文件不会自动加载,需要编辑/etc/fstab文件写入挂载项,在文件末尾追加一行:
/swapfile none swap sw 0 0
保存退出后,执行sudo swapon --all测试配置是否生效,或者直接执行reboot重启验证。
free命令验证结果对照表
| 内存大小 | 建议swap大小 | 配置命令示例 |
|---|---|---|
| 512M | 1G | fallocate -l 1G /swapfile |
| 1G | 2G |
|
| 2G以上 | 1-2G | fallocate -l 2G /swapfile |
控制swap使用时机:swappiness参数调整
系统默认的swappiness值为60,即内存使用率达到相当比例时就开始使用swap,对VPS来说这个值偏激进,因为物理内存的响应速度远快于硬盘。
执行以下命令查看当前swappiness值:
cat /proc/sys/vm/swappiness
建议将swappiness调整为10到20之间,优先使用物理内存,避免频繁读写swap文件导致磁盘I/O压力增大:
sudo sysctl vm.swappiness=10
此命令重启后会失效,需要编辑/etc/sysctl.conf文件,在末尾写入:
vm.swappiness=10
执行sudo sysctl -p让配置立即生效,对于运行数据库或内存型应用的VPS,业内普遍推荐将swappiness设为10;对于2G及以下内存的VPS,设置20能在内存和swap之间取得更好的平衡。
配置swap时容易踩的五个坑
磁盘I/O瓶颈问题
机械硬盘VPS使用swap后,如果频繁发生内存换页,磁盘I/O会成为瓶颈,性能不佳的VPS配置swap后反而可能出现系统卡顿,这类VPS建议加内存而不是加swap。
使用率内存的VPS需谨慎
部分VPS商家的内存超售率相当高,配置swap会掩盖内存不足的问题,如果你购买的VPS价格异常便宜,比如年付几十元的特价机,swap的稳定性很难保证。
swap文件位置对性能有影响
swap文件建议放在系统盘的独立位置,不要和数据库文件放在同一磁盘分区,使用SSD硬盘的VPS在swap读写性能上明显优于机械硬盘。
内存充足的VPS不必配置swap
如果你的VPS内存有4G且使用率通常不到一半,配置swap反而浪费磁盘空间,建议先观察一段时间的free -h
输出,确认物理内存确实吃紧时再配置。
验证VPS swap是否生效的完整流程
配置完成后,按以下步骤全面验证:
- 执行
free -h,查看Swap行的total和used字段是否正常 - 执行
htop或top查看内存使用趋势 - 重启一次VPS,再次执行
free -h确认开机自启成功 - 日常使用几天后观察磁盘占用情况
如果swap配置后系统出现异常重启,检查/var/log/messages或journalctl日志中是否有swap相关报错信息。
Q&A:VPS添加swap分区常见疑问解答
XEN架构的VPS配置swap和KVM有哪些不同?
XEN老版本的内核只支持swap分区,不支持swap文件,遇到read swap header failed报错时需要在fdisk中创建Linux swap分区并激活,KVM虚拟化的VPS没有这个限制,swap文件是首选方案,不确定虚拟化类型时,执行systemd-detect-virt命令即可查看。
VPS配置swap后内存使用率为什么还是很高?
swap只是内存的溢出空间,系统在物理内存充足时不会主动使用swap,如果swap使用量持续增长但物理内存还有大量空闲,需要调低swappiness值使其更倾向于使用物理内存,执行cat /proc/sys/vm/swappiness确认当前值是否在推荐范围内,swap占用空间持续上涨且物理内存长期满载,说明VPS确实存在内存不足的问题,建议升级配置。
宝塔面板环境配置swap需要注意什么?
宝塔面板提供了图形化的swap管理功能,在软件商店中安装Linux工具箱即可直接创建swap,手动配置时要注意宝塔的MySQL或PHP进程会占用大量内存,建议swap大小设置为物理内存的2倍,并将swappiness调整为20,避免数据库性能因磁盘换页而下降,配置完成后在面板首页查看内存使用趋势和swap使用量变化。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/622543.html





