Create a swapfile for your Linux server

:bulb: For servers with <= 4GB of RAM, running ./discourse-setup will prompt for and automatically create a 2GB swapfile.

Most cloud virtual machine providers do not set up swapfiles as part of their server provisioning.

In particular, upgrading Discourse produces a lot of memory pressure. With a swap file, rather than randomly terminating processes with an out of memory error, things will slow down instead. Having a swap file is a cheap insurance policy that protects you from many other load related failures.

This can be done at any time from the command line on your server.

Set up a 2GB swap file

We recommend a 2GB swap file for Discourse, unless your server has more than 4GB of memory.

In the shell you have opened to your droplet, do the following:

:warning: You will need to be root for much of this, so either be root or sudo -s before running these commands! Don’t forget to exit root afterwards.

  1. Create an empty swapfile

     install -o root -g root -m 0600 /dev/null /swapfile
    
  2. Allocate a 2GB file named ‘swapfile’

     fallocate -l 2G /swapfile
    
  3. tell linux this is the swap file:

     mkswap /swapfile
    
  4. Activate it

     swapon /swapfile
    
  5. Add it to the file system table so its there after reboot:

     echo "/swapfile       swap    swap    auto      0       0" | tee -a /etc/fstab
    
  6. Set the swappiness to 10 so its only uses as an emergency buffer

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

The whole thing as a single copy and pastable script:

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

Last edited by @JammyDodger 2022-05-23T18:45:59Z

Check documentPerform check on document:
96 лайков

Я пытался создать файл подкачки большего размера (4 ГБ вместо стандартных 2 ГБ), но при запуске приведённого выше скрипта столкнулся с этой ошибкой:

rm: невозможно удалить «swapfile»: операция не разрешена

Чтобы обойти это, мне пришлось сначала сделать следующее:

  1. Перезагрузить сервер (он не давал выполнить swapoff, предположительно из-за высокой нагрузки на файл подкачки)
  2. swapoff -a -v
3 лайка

По аналогичным причинам я использую два файла подкачки:

# swapon
NAME                       TYPE  SIZE  USED PRIO
/var/local/swap/swapfile.0 file 1024M 44.9M   -3
/var/local/swap/swapfile.1 file 1024M 1024M   -2

Второй файл подкачки может стать хитрым способом избежать перезагрузки. Просто создайте второй файл подкачки, включите его, а затем удалите первый.

4 лайка

Значит, нам не нужно следовать этой инструкции для создания файла подкачки размером 2 ГБ, поскольку установка делает это автоматически, если у нас меньше 2 ГБ памяти?

Да, но если вы измените конфигурацию сервера или, возможно, выполните миграцию, вам, возможно, придется позаботиться об этом самостоятельно. (В то же время есть две важные конфигурации ядра, которые необходимо изменить, и установка не занимается ими — см. Мнение MKJ о конфигурации развёртывания Discourse)

10 сообщений были перенесены в новую тему: Высокие требования к памяти при перестройке: апрель 2025 года