# Linux Swap 创建与优化指南(Ubuntu 22.04 实战)

​ 当服务器内存较小(例如 1GB、2GB)时,运行Node.js、Nginx、容器、编译项目等任务时非常容易出现内存不足而导致程序被系统杀掉。
​ 为了提升稳定性,我们通常会为服务器增加 Swap 分区 来扩容"虚拟内存"。

​ 本文基于 Ubuntu 22.04 演示如何创建一个 2GB 的 Swap文件,并通过一些优化让 Swap 更高效、更省资源、更不容易拖慢系统。


# 什么是 Swap?为什么需要?

Swap 是 Linux 利用硬盘空间模拟出的"虚拟内存"。
当实际物理内存不够时,系统会把暂时不用的内存数据交换至 Swap中,从而避免程序被强制终止。

在以下情况中,Swap 非常重要:

  • 服务器内存只有 1GB / 2GB
  • 构建项目(构建 Hexo/Hugo、安装 npm 包)
  • 高频读写程序导致内存被缓存占满

虽然 Swap的速度比内存慢得多,但是在小内存服务器上,它是让系统"能活下去"的关键。

我的服务器是 2C2G,属于轻量应用型,因此我选择创建额外 2GB 的Swap,让系统更稳定。


# 1. 创建 2GB Swap 文件

sudo fallocate -l 2G /swapfile

如果你的系统不支持 fallocate(极少数情况),可以改用:

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

# 2. 设置权限

出于安全性考虑,Swap 文件必须使用 600 权限,只允许 root 读写:

sudo chmod 600 /swapfile

# 3. 格式化为 swap 空间

sudo mkswap /swapfile

# 4. 启用 swap

sudo swapon /swapfile

此时 Swap 已经立即生效,可以通过 free -h 查看。


# 5. 设置开机自动挂载(永久生效)

如果不进行此步骤,重启后 Swap 会失效,因此务必执行:

echo '/swapfile   none    swap    sw    0   0' | sudo tee -a /etc/fstab

# 6. Swap 优化参数(强烈推荐)

Swap 默认策略比较激进,会在内存还足够时就开始使用Swap,从而导致系统变慢。因此我们需要对系统行为进行优化,让系统更聪明地使用Swap。


# 6.1 减少 Swap 使用频率(swappiness)

swappiness 默认值通常为 60,对小内存系统太激进,会导致频繁写入
Swap。

将其调整为 10 更适合轻量服务器:

sudo sysctl vm.swappiness=10

写入永久配置:

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

# 6.2 优化缓存回收策略(vfs_cache_pressure)

默认值为 100,表示比较积极地回收 inode/dentry 缓存。

轻量服务器一般希望保留更多缓存,提高文件系统性能,因此设置为 50:

sudo sysctl vm.vfs_cache_pressure=50

写入永久配置:

echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf

# 7. 验证配置是否生效

# 查看 Swap 是否可用

free -h

# 查看 swappiness

cat /proc/sys/vm/swappiness

# 查看 vfs_cache_pressure

cat /proc/sys/vm/vfs_cache_pressure

# 查看 /etc/fstab 是否包含 swapfile

cat /etc/fstab

你需要看到:

/swapfile   none    swap    sw    0   0

# 总结

通过上述步骤,我们成功为 2C2G 的服务器增加了 2GB Swap,并对 Swap行为进行了优化,使系统更加稳定:

  • 避免 OOM 导致进程被杀
  • 构建、安装依赖更顺畅
  • Swap 使用更稳、更聪明,不会拖慢系统

对于轻量级 VPS 来说,合理的 Swap 是提升稳定性的关键一步。