Como Adicionar Espaço de Troca no Ubuntu 22.04

Introdução

Uma maneira de se proteger contra erros de falta de memória em aplicativos é adicionar algum espaço de troca ao seu servidor. Neste guia, abordaremos como adicionar um arquivo de troca a um servidor Ubuntu 22.04.

O que é Troca?

Troca é uma porção de armazenamento do disco rígido que foi reservada para o sistema operacional armazenar temporariamente dados que não consegue mais manter na RAM. Isso permite aumentar a quantidade de informações que o servidor pode manter em sua memória de trabalho, com algumas ressalvas. O espaço de troca no disco rígido será usado principalmente quando não houver mais espaço suficiente na RAM para manter os dados do aplicativo em uso.

As informações gravadas no disco serão significativamente mais lentas do que as informações mantidas na RAM, mas o sistema operacional preferirá manter os dados do aplicativo em execução na memória e usar a troca para os dados mais antigos. No geral, ter espaço de troca como uma alternativa quando a RAM do sistema estiver esgotada pode ser uma boa rede de segurança contra exceções de falta de memória em sistemas com armazenamento não-SSD disponível.

Passo 1 – Verificar o Sistema para Informações de Swap

Antes de começarmos, podemos verificar se o sistema já possui algum espaço de swap disponível. É possível ter vários arquivos de swap ou partições de swap, mas geralmente um deve ser suficiente.

Podemos verificar se o sistema possui algum swap configurado digitando:

  1. sudo swapon --show

Se você não receber nenhuma saída de volta, isso significa que seu sistema atualmente não possui espaço de swap disponível.

Você pode verificar que não há swap ativo usando o utilitário free:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

Como você pode ver na linha Swap da saída, nenhum swap está ativo no sistema.

Passo 2 – Verificar o Espaço Disponível na Partição do Disco Rígido

Antes de criarmos nosso arquivo de swap, vamos verificar o uso atual do disco para garantir que temos espaço suficiente. Faça isso digitando:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 932K 98M 1% /run /dev/vda1 25G 1.4G 23G 7% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi /dev/loop0 55M 55M 0 100% /snap/core18/1705 /dev/loop1 69M 69M 0 100% /snap/lxd/14804 /dev/loop2 28M 28M 0 100% /snap/snapd/7264 tmpfs 99M 0 99M 0% /run/user/1000

O dispositivo com / na coluna Montado em é o nosso disco neste caso. Temos bastante espaço disponível neste exemplo (apenas 1,4G usado). Seu uso provavelmente será diferente.

Embora haja muitas opiniões sobre o tamanho apropriado de um espaço de troca, realmente depende das suas preferências pessoais e dos requisitos da sua aplicação. Geralmente, uma quantidade igual ou o dobro da quantidade de RAM no seu sistema é um bom ponto de partida. Outra boa regra prática é que qualquer coisa acima de 4G de troca provavelmente é desnecessária se você estiver apenas usando-a como reserva de RAM.

Passo 3 – Criando um Arquivo de Troca

Agora que sabemos nosso espaço disponível no disco rígido, podemos criar um arquivo de troca em nosso sistema de arquivos. Vamos alocar um arquivo do tamanho que desejamos chamado swapfile em nosso diretório raiz (/).

A melhor maneira de criar um arquivo de troca é com o programa fallocate. Este comando cria instantaneamente um arquivo do tamanho especificado.

Como o servidor em nosso exemplo tem 1G de RAM, vamos criar um arquivo de 1G neste guia. Ajuste isso para atender às necessidades do seu próprio servidor:

  1. sudo fallocate -l 1G /swapfile

Podemos verificar se a quantidade correta de espaço foi reservada digitando:

  1. ls -lh /swapfile
  1. -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

Nosso arquivo foi criado com a quantidade correta de espaço reservada.

Passo 4 – Habilitando o Arquivo de Troca

Agora que temos um arquivo do tamanho correto disponível, precisamos realmente transformá-lo em espaço de troca.

Primeiro, precisamos restringir as permissões do arquivo para que apenas os usuários com privilégios de root possam ler o conteúdo. Isso impede que usuários normais acessem o arquivo, o que teria significativas implicações de segurança.

Tornar o arquivo acessível apenas para root digitando:

  1. sudo chmod 600 /swapfile

Verificar a mudança de permissões digitando:

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Como pode ver, apenas o usuário root tem as bandeiras de leitura e escrita ativadas.

Agora podemos marcar o arquivo como espaço de troca digitando:

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Após marcar o arquivo, podemos habilitar o arquivo de troca, permitindo que nosso sistema comece a usá-lo:

  1. sudo swapon /swapfile

Verificar se a troca está disponível digitando:

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

Podemos verificar a saída do utilitário free novamente para corroborar nossas descobertas:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi

Nossa troca foi configurada com sucesso e nosso sistema operacional começará a usá-la conforme necessário.

Passo 5 – Tornando o Arquivo de Troca Permanente

Nossas mudanças recentes habilitaram o arquivo de troca para a sessão atual. No entanto, se reiniciarmos, o servidor não manterá automaticamente as configurações de troca. Podemos mudar isso adicionando o arquivo de troca ao nosso arquivo /etc/fstab.

Fazer backup do arquivo /etc/fstab caso algo dê errado:

  1. sudo cp /etc/fstab /etc/fstab.bak

Adicione as informações do arquivo de troca ao final do seu arquivo /etc/fstab digitando:

  1. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Em seguida, revisaremos algumas configurações que podemos atualizar para ajustar nosso espaço de troca.

Passo 6 – Ajustando suas Configurações de Troca

Há algumas opções que você pode configurar que terão um impacto no desempenho do seu sistema ao lidar com a troca.

Ajustando a Propriedade de Swappiness

O parâmetro swappiness configura com que frequência seu sistema troca dados da RAM para o espaço de troca. Este é um valor entre 0 e 100 que representa uma porcentagem.

Com valores próximos a zero, o kernel não trocará dados para o disco a menos que seja absolutamente necessário. Lembre-se, interações com o arquivo de troca são “caras” no sentido de que levam muito mais tempo do que interações com a RAM e podem causar uma redução significativa no desempenho. Dizer ao sistema para não depender muito da troca geralmente tornará seu sistema mais rápido.

Valores mais próximos de 100 tentarão colocar mais dados na troca na tentativa de manter mais espaço de RAM livre. Dependendo do perfil de memória de suas aplicações ou do que você está usando seu servidor, isso pode ser melhor em alguns casos.

Podemos ver o valor atual de swappiness digitando:

  1. cat /proc/sys/vm/swappiness
Output
60

Para um Desktop, um valor de swappiness de 60 não é ruim. Para um servidor, você pode querer movê-lo mais perto de 0.

Podemos definir o swappiness para um valor diferente usando o comando sysctl.

Por exemplo, para definir o swappiness como 10, poderíamos digitar:

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

Essa configuração persistirá até o próximo reinício. Podemos definir esse valor automaticamente no reinício adicionando a linha ao nosso arquivo /etc/sysctl.conf:

  1. sudo nano /etc/sysctl.conf

No final, você pode adicionar:

/etc/sysctl.conf
vm.swappiness=10

Salve e feche o arquivo quando terminar.

Ajustando a Configuração da Pressão de Cache

Outro valor relacionado que você pode querer modificar é o vfs_cache_pressure. Esta configuração configura quanto o sistema escolherá para armazenar informações de inode e dentry sobre outros dados.

Basicamente, isso é acessar dados sobre o sistema de arquivos. Isso geralmente é muito caro para procurar e é solicitado com muita frequência, então é uma excelente coisa para o seu sistema armazenar em cache. Você pode ver o valor atual consultando o sistema de arquivos proc novamente:

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

Como está atualmente configurado, nosso sistema remove as informações de inode do cache muito rapidamente. Podemos definir isso para uma configuração mais conservadora, como 50, digitando:

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

Novamente, isso é válido apenas para nossa sessão atual. Podemos alterar isso adicionando ao nosso arquivo de configuração, assim como fizemos com a configuração de swappiness:

  1. sudo nano /etc/sysctl.conf

No final, adicione a linha que especifica o novo valor:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

Salve e feche o arquivo quando terminar.

Conclusão

Seguir os passos deste guia lhe dará um pouco de espaço de manobra em casos que, de outra forma, levariam a exceções de falta de memória. O espaço de troca pode ser incrivelmente útil para evitar alguns desses problemas comuns.

Se você estiver enfrentando erros de OOM (falta de memória) ou se perceber que seu sistema não consegue usar os aplicativos necessários, a melhor solução é otimizar as configurações do seu aplicativo ou fazer um upgrade do seu servidor.

Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04