为您的 Linux 服务器创建交换文件

:bulb: 对于内存小于或等于 4GB 的服务器,运行 ./discourse-setup 将提示并自动创建一个 2GB 的交换文件(swapfile)。

大多数云虚拟机提供商在提供服务器时不会设置交换文件。

特别是,升级 Discourse 会产生很大的内存压力。有了交换文件,进程将只是变慢,而不是因为内存不足而被意外终止。拥有一个交换文件是对抗许多其他负载相关故障的廉价保险策略。

这可以随时在您的服务器命令行上完成。

设置 2GB 交换文件

我们建议为 Discourse 设置一个 2GB 的交换文件,除非您的服务器有超过 4GB 的内存。

在您打开到您的液滴(droplet)的 shell 中,执行以下操作:

:warning: 在此过程中大部分时间您都需要 root 权限,因此在运行这些命令之前,请成为 root 或运行 sudo -s!不要忘记之后退出 root 权限。

  1. 创建一个空的交换文件

     install -o root -g root -m 0600 /dev/null /swapfile
    
  2. 分配一个名为 ‘swapfile’ 的 2GB 文件

     fallocate -l 2G /swapfile
    
  3. 告诉 Linux 这是交换文件:

     mkswap /swapfile
    
  4. 激活它

     swapon /swapfile
    
  5. 将其添加到文件系统表,以便在重启后仍然存在:

     echo "/swapfile       swap    swap    auto      0       0" | tee -a /etc/fstab
    
  6. 将 swappiness 设置为 10,因此它只用作紧急缓冲区

     sysctl -w vm.swappiness=10
     echo 'vm.swappiness = 10' > /etc/sysctl.d/30-discourse-swap.conf
    

整个内容作为一个可复制粘贴的脚本:

install -o root -g root -m 0600 /dev/null /swapfile
fallocate -l 2G /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile       swap    swap    auto      0       0" | tee -a /etc/fstab
sysctl -w vm.swappiness=10
echo 'vm.swappiness = 10' > /etc/sysctl.d/30-discourse-swap.conf
96 个赞

我一直在尝试设置一个更大的交换文件(4GB 而不是默认的 2GB),但在运行上面的脚本时遇到了这个问题:

rm: cannot remove `swapfile’: Operation not permitted

为了解决这个问题,我不得不先这样做:

  1. 重启服务器(由于交换文件使用量大,它不允许我 swapoff
  2. swapoff -a -v
3 个赞

出于类似的原因,我运行了两个交换文件:

# swapon
名称                       类型  大小  已用  优先级
/var/local/swap/swapfile.0 文件 1024M 44.9M   -3
/var/local/swap/swapfile.1 文件 1024M 1024M   -2

第二个交换文件可能是避免重启的巧妙方法。只需创建一个第二个交换文件,启用它,然后删除第一个。

4 个赞

那么我们就不需要遵循这个指南来创建2GB的交换文件了,因为如果我们的内存少于2GB,安装程序就会自动创建它?

是的——但如果你更改了服务器配置,或者进行了迁移,你可能需要自己处理。 (同时,安装程序不会处理两个重要的内核配置——请参阅 MKJ 的意见化 Discourse 部署配置

10 个帖子被拆分到一个新主题:高重建内存要求:2025 年 4 月版