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:
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
:
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:
OutputFilesystem 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:
Podemos verificar se a quantidade correta de espaço foi reservada digitando:
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:
Verificar a mudança de permissões digitando:
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:
OutputSetting 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:
Verificar se a troca está disponível digitando:
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Podemos verificar a saída do utilitário free
novamente para corroborar nossas descobertas:
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:
Adicione as informações do arquivo de troca ao final do seu arquivo /etc/fstab
digitando:
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:
Output60
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:
Outputvm.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
:
No final, você pode adicionar:
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:
Output100
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:
Outputvm.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:
No final, adicione a linha que especifica o novo valor:
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