# 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 是提升稳定性的关键一步。