Criar um arquivo swap para seu servidor Linux

:bulb: Para servidores com 4 GB de RAM ou menos, a execução de ./discourse-setup solicitará e criará automaticamente um arquivo de troca (swapfile) de 2 GB.

A maioria dos provedores de máquinas virtuais em nuvem não configura arquivos de troca como parte do provisionamento do servidor.

Em particular, a atualização do Discourse gera muita pressão de memória. Com um arquivo de troca, em vez de terminar processos aleatoriamente com um erro de falta de memória, as coisas ficarão mais lentas. Ter um arquivo de troca é uma apólice de seguro barata que protege você de muitas outras falhas relacionadas à carga.

Isso pode ser feito a qualquer momento a partir da linha de comando no seu servidor.

Configurar um arquivo de troca de 2 GB

Recomendamos um arquivo de troca de 2 GB para o Discourse, a menos que seu servidor tenha mais de 4 GB de memória.

No shell que você abriu para seu droplet, faça o seguinte:

:warning: Você precisará ser root para grande parte disso, então seja root ou use sudo -s antes de executar estes comandos! Não se esqueça de sair do root depois.

  1. Crie um arquivo de troca vazio

     install -o root -g root -m 0600 /dev/null /swapfile
    
  2. Alocar um arquivo de 2 GB chamado ‘swapfile’

     fallocate -l 2G /swapfile
    
  3. Dizer ao linux que este é o arquivo de troca:

     mkswap /swapfile
    
  4. Ativá-lo

     swapon /swapfile
    
  5. Adicioná-lo à tabela do sistema de arquivos para que esteja lá após a reinicialização:

     echo "/swapfile       swap    swap    auto      0       0" | tee -a /etc/fstab
    
  6. Definir a swappiness para 10 para que seja usada apenas como um buffer de emergência

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

O processo inteiro como um único script para copiar e colar:

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 curtidas

Tenho tentado configurar um swapfile maior (4 GB em vez dos 2 GB padrão), mas encontrei isto ao executar o script acima:

rm: não é possível remover `swapfile’: Operação não permitida

Para contornar isso, tive que fazer o seguinte primeiro:

  1. Reiniciar o servidor (não me permitiu swapoff, presumivelmente devido ao uso intensivo do swapfile)
  2. swapoff -a -v
3 curtidas

Por motivos semelhantes, eu executo com dois swapfiles:

# 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

Um segundo arquivo de paginação poderia ser uma maneira inteligente de evitar a reinicialização. Basta criar um segundo arquivo de paginação, habilitá-lo e, em seguida, remover o primeiro.

4 curtidas

Então não precisaremos seguir este guia para criar o arquivo de swap de 2 GB, já que a instalação já faz isso se tivermos menos de 2 GB de memória?

Sim - mas se você alterar a configuração do seu servidor, ou talvez se fizer uma migração, pode ser que precise cuidar disso sozinho. (Ao mesmo tempo, existem duas configurações importantes do kernel para alterar que a instalação não cuida - veja MKJ’s Opinionated Discourse Deployment Configuration

10 posts foram divididos em um novo tópico: Requisitos elevados de memória de reconstrução: edição de abril de 2025