1. 内存使用率高,不一定代表内存不够#
Linux 会把空闲内存用于缓存,便于下次更快读取文件。判断是否缺内存,先看 available、Swap 活动和应用是否被 OOM 终止,而不是只看控制面板的一条红色进度条。
free -h
swapon --show
vmstat 1 10free 的 available 是系统估算可供新应用使用的内存;vmstat 的 si/so 是换入换出活动。Swap 已使用但 si/so 长期接近零,可能只是历史上换出的冷数据,不必为了“变绿”强制清空。

2. 先找占用者和 OOM 记录#
ps -eo pid,user,%mem,rss,comm --sort=-rss | head -15
sudo journalctl -k --since '24 hours ago' --no-pager | grep -i -E 'out of memory|killed process|oom'RSS 通常以 KiB 计,适合初步找占用较大的进程,但共享内存会影响相加结果。PHP 进程太多、数据库缓存过大、容器没有资源约束,都可能挤压小内存实例。先降低不必要的并发或修复泄漏,再决定增加 Swap 或升级内存。
3. 在合适的文件系统上创建 Swap 文件#
下面示例适用于普通 ext4 文件系统,创建一个新的 1 GiB Swap 文件。先确认磁盘有足够空间、路径不存在,并检查是否已经配置 Swap。Btrfs、稀疏文件和部分存储布局有额外要求,应使用对应文件系统文档。
sudo sh -eu <<'SWAP_SETUP'
if [ -e /swapfile ]; then
echo '/swapfile 已存在,请先检查;本次未修改。' >&2
exit 1
fi
dd if=/dev/zero of=/swapfile bs=1M count=1024 status=progress
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
SWAP_SETUP
swapon --show脚本发现已有路径会立即停止;其中任何创建或启用步骤失败也会停止。mkswap 只能用于自己新建的 Swap 文件,绝不能指向已有数据分区。失败后先检查原因,不要为了重试随意删除已有文件。
4. 验证后再加入启动配置#
备份 /etc/fstab,确认没有同一条记录,再增加:
/swapfile none swap sw 0 0用 swapon --show 与 free -h 确认启用,下一次计划重启后再检查是否自动加载。vm.swappiness 控制内核换页倾向,但合适值取决于工作负载;不要把某个网络流传数值当成所有 VPS 的最佳值。
5. 扩大或移除 Swap 时注意剩余内存#
关闭 Swap 会把需要的页面搬回内存,内存不足时可能失败或引发压力。先降低业务负载,确认可用内存,再对明确的 Swap 文件执行 swapoff;不必为了改大小停掉所有 Swap。
持续大量换页通常意味着工作集超过了物理内存。Swap 能减少突然 OOM 的机会,但磁盘速度远低于内存,不能把 1 GiB 实例变成真正的 8 GiB 实例。继续看进程监控和升级套餐。
完成后检查
调整后观察真实业务延迟和 OOM 日志。不要只以面板颜色判断是否需要加倍 Swap。