VPS添加Swap虚拟内存教程


搬瓦工VPS的低价方案通常只有512MB或1GB内存,运行Web服务器、数据库和PHP-FPM后内存很容易不够用。当物理内存耗尽时,Linux会触发OOM Killer强制杀死进程,导致服务中断。添加Swap虚拟内存可以将磁盘空间作为内存的扩展,有效避免OOM问题。

Tip: Swap不能替代物理内存,磁盘读写速度远低于内存。Swap主要用于应急缓冲,如果VPS长期依赖Swap运行,说明需要升级更高内存的方案。

一、检查当前Swap状态

# 查看当前内存和Swap使用情况
free -h

# 查看是否已有Swap
swapon --show

# 查看磁盘空间(确保有足够空间创建Swap文件)
df -h

二、创建Swap文件

Swap大小的推荐值:

# 方法1:使用fallocate创建(推荐,速度快)
fallocate -l 1G /swapfile

# 方法2:如果fallocate不可用,使用dd创建
dd if=/dev/zero of=/swapfile bs=1M count=1024

# 设置正确的权限(只有root可以读写)
chmod 600 /swapfile

# 格式化为Swap
mkswap /swapfile

# 启用Swap
swapon /swapfile

# 验证Swap已启用
free -h
swapon --show

三、设置开机自动挂载

上面的操作在重启后会失效,需要写入/etc/fstab实现永久挂载:

# 备份fstab(重要!错误的fstab可能导致系统无法启动)
cp /etc/fstab /etc/fstab.bak

# 添加Swap到fstab
echo '/swapfile none swap sw 0 0' >> /etc/fstab

# 验证fstab内容
cat /etc/fstab

四、调整swappiness参数

swappiness参数控制系统使用Swap的积极程度,取值范围0-100:

VPS建议设置为10-30,减少不必要的磁盘I/O:

# 查看当前swappiness值
cat /proc/sys/vm/swappiness

# 临时修改(立即生效,重启失效)
sysctl vm.swappiness=10

# 永久修改
echo 'vm.swappiness=10' >> /etc/sysctl.conf

# 或使用更规范的方式
cat >> /etc/sysctl.d/99-swap.conf << 'EOF'
vm.swappiness = 10
vm.vfs_cache_pressure = 50
EOF

# 使配置生效
sysctl -p /etc/sysctl.d/99-swap.conf

vfs_cache_pressure参数控制内核回收目录和inode缓存的倾向。默认值100,设为50可以让系统更倾向于保留缓存。

五、监控Swap使用情况

# 实时查看内存和Swap
free -h

# 查看Swap使用详情
swapon --show

# 查看哪些进程在使用Swap
# 方法1:通过/proc查看
for file in /proc/*/status; do
  awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file
done | sort -k 2 -n -r | head -20

# 方法2:使用top命令查看(按Shift+M按内存排序)
top

# 方法3:使用smem工具(需要安装)
apt install smem -y
smem -s swap -r | head -20

六、调整Swap大小

如果需要修改Swap大小:

# 关闭当前Swap
swapoff /swapfile

# 删除旧文件
rm /swapfile

# 创建新的Swap文件(例如2GB)
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 验证新大小
free -h

七、删除Swap

如果不再需要Swap:

# 关闭Swap
swapoff /swapfile

# 从fstab中删除Swap行
nano /etc/fstab
# 删除包含 /swapfile 的行

# 删除Swap文件
rm /swapfile

# 验证
free -h

八、完整一键脚本

将以上步骤整合为一键脚本,方便快速部署:

#!/bin/bash
# VPS一键添加Swap脚本
SWAP_SIZE="1G"
SWAP_FILE="/swapfile"

# 检查是否已有Swap
if swapon --show | grep -q "$SWAP_FILE"; then
  echo "Swap已存在,退出"
  exit 1
fi

# 创建Swap
echo "正在创建${SWAP_SIZE} Swap..."
fallocate -l $SWAP_SIZE $SWAP_FILE
chmod 600 $SWAP_FILE
mkswap $SWAP_FILE
swapon $SWAP_FILE

# 写入fstab
if ! grep -q "$SWAP_FILE" /etc/fstab; then
  echo "$SWAP_FILE none swap sw 0 0" >> /etc/fstab
fi

# 设置swappiness
sysctl vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.conf

echo "Swap配置完成!"
free -h

更多系统优化设置请参考Linux内核参数优化详解

Tip: 更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程