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 parte do 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 seu 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 seu 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 – Verificando 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, isso significa que seu sistema não possui espaço de swap disponível atualmente.

Você pode verificar se 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 – Verificando o Espaço Disponível na Partição do Disco Rígido

Antes de criarmos nosso arquivo de swap, vamos verificar nosso 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 um recurso de 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 desejado 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 que 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 bloquear as permissões do arquivo para que apenas usuários com privilégios de root possam ler o conteúdo. Isso impede que usuários normais acessem o arquivo, o que teria implicações de segurança significativas.

Torne o arquivo acessível apenas para o root digitando:

  1. sudo chmod 600 /swapfile

Verifique a mudança de permissões digitando:

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

Como você pode ver, apenas o usuário root tem as permissões 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

Verifique 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.

Etapa 5 – Tornando o Arquivo de Troca Permanente

Nossas alterações 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 alterar isso adicionando o arquivo de troca ao nosso arquivo /etc/fstab.

Faça 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, vamos revisar 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 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, as interações com o arquivo de troca são “caras” no sentido de que levam muito mais tempo do que as 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 que estão 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 para, 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 próximo de 0.

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

Por exemplo, para definir o swappiness para 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 na reinicialização 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 de Pressão do Cache

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

Basicamente, isso é acessar dados sobre o sistema de arquivos. Isso geralmente é muito custoso para pesquisar e muito frequentemente solicitado, 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 do 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 só é válido para nossa sessão atual. Podemos alterar isso adicionando ao nosso arquivo de configuração, assim como fizemos com nossa configuração de swappiness:

  1. sudo nano /etc/sysctl.conf

Na parte inferior, 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 mais de espaço 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 utilizar os aplicativos necessários, a melhor solução é otimizar as configurações do seu aplicativo ou fazer upgrade do seu servidor.

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