−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS

如何在 Linux VPS 上添加 swap 文件

用五条命令创建 swap 文件,让它在重启后依然生效,并调整 swappiness;另外说明该加多少 swap,以及什么时候真正的解决办法是加内存。

小服务器总是在最糟糕的时候耗尽内存:一次 apt upgrade、一次 Docker 构建、深夜的备份。没有 swap 时,内核的 OOM killer 会挑一个进程杀掉,往往就是你的数据库。swap 文件是一条便宜的安全带,给这些峰值留一条出路。只需要五条命令。

1. 查看现状

swapon --show
free -h

如果 swapon --show 什么都没输出,说明还没有 swap。

2. 创建 swap 文件

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

chmod 600 很重要:swap 里可能留有内存中任何内容的碎片,包括机密信息,所以应当只有 root 能读取。如果 fallocate 报错 “operation not supported”,就改用 dd:

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

3. 让它永久生效

没有这一步,swap 会在重启后消失:

echo '/swapfile none swap sw 0 0' >> /etc/fstab

4. 调整 swappiness

让内核优先使用内存,主要在吃紧时才用 swap:

echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
sysctl --system

5. 验证

swapon --show
free -h

你应该能看到一个 2 GB 的 swap 设备,cat /proc/sys/vm/swappiness 应该输出 10。

该设多大?

不要按“内存的两倍”来设 swap。在服务器上,swap 是用来吸收短暂峰值的,而不是用来运行内存装不下的负载。

swap 不是答案的时候

观察它几天:

vmstat 5

si 和 so 两列显示每秒从 swap 读入和写出的页数。偶尔有活动是正常的。如果持续不为零,说明服务器内存不足,所有东西都在等磁盘。这时的解决办法是加内存:参见 VPS 需要多少内存。在 EQVPS,你可以升级到更大的套餐而无需重装;你的数据原封不动。

相关

常见问题

我应该加多少 swap?

对于 1–2 GB 内存的服务器,1–2 GB 的 swap 文件是个不错的默认值。更大的服务器上,1–2 GB 作为安全网也依然够用:“内存的两倍”这条规则来自 256 MB 机器的年代。

swap 会让服务器变快吗?

不会。swap 只是在内存短暂耗尽时防止崩溃:包更新、Docker 构建、备份。磁盘上的内存页比内存慢几千倍。如果服务器一直在用 swap,说明它需要更多内存。

swappiness 有什么作用?

它决定内核有多积极地把空闲内存移到 swap。默认值 60 会相当早地这么做;设为 10 则告诉内核尽量把数据留在内存里,主要在真正吃紧时才用 swap,这适合大多数服务器。

为什么用 swap 文件而不是分区?

文件可以在服务器运行时几秒内创建、调整大小和删除,完全不用动分区表。在现代文件系统上,性能是一样的。

以后怎么移除 swap?

运行 'swapoff /swapfile',删掉 /etc/fstab 里 /swapfile 那一行,然后运行 'rm /swapfile'。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。