Como Otimizar Swap e Swappiness no Ubuntu Server

10 min de leitura Otimização de VPS Ubuntu
Como Otimizar Swap e Swappiness no Ubuntu Server

Otimização de Swap e Swappiness no Ubuntu Server

A gestão eficiente de memória RAM é um dos pilares fundamentais para garantir a estabilidade e a performance de servidores Linux, especialmente em ambientes de Virtual Private Server (VPS) onde os recursos são compartilhados ou limitados por planos. Embora a memória física seja o meio mais rápido para o processador acessar dados, ela não é infinita. É aqui que o conceito de swap entra em cena, funcionando como uma extensão da memória RAM no disco rígido ou SSD.

Muitos administradores de sistemas (sysadmins) cometem o erro de desabilitar a área de swap por medo de degradação de performance, ou deixam as configurações padrão do sistema operacionais inalteradas, ignorando que o comportamento do kernel Linux pode não ser ideal para cargas de trabalho específicas. Neste tutorial, vamos explorar como configurar e otimizar o uso de swap e o parâmetro vm.swappiness no Ubuntu Server para equilibrar estabilidade e velocidade.

O que é Swap e por que ele é necessário?

O arquivo de swap (ou espaço de troca) é uma área no disco rígido usada pelo kernel do Linux como memória virtual. Quando a RAM física está cheia, o kernel move páginas de memória inativas para o espaço de swap, liberando RAM para processos ativos. Isso previne que aplicações sejam encerradas abruptamente devido à falta de memória (erro Out of Memory ou OOM).

No entanto, discos são ordens de magnitude mais lentos que a memória RAM. Se o sistema depender excessivamente do swap, a latência aumenta drasticamente, resultando em um servidor "travado" ou responsivo lentamente. Portanto, o objetivo não é evitar o uso de swap a todo custo, mas sim gerenciar quando e como ele é utilizado.

Verificando o Estado Atual do Swap

Antes de qualquer configuração, é crucial entender o cenário atual do seu servidor. Vamos verificar se o swap está ativo e qual sua quantidade.

  1. Abra seu terminal ou conexão SSH no Ubuntu Server.
  2. Execute o comando free -h. Este comando exibe a memória livre, usada e total em formato legível para humanos (GB/MB).
free -h

A saída mostrará linhas para total, used, free, shared, buff/cache e available. Preste atenção na coluna swap. Se o valor total for 0, você não possui área de troca configurada.

Outra ferramenta útil é o swapon --show, que lista especificamente as áreas de swap ativas:

swapon --show

Passo 1: Criando um Arquivo de Swap (Se necessário)

Se o comando anterior retornou saída vazia, você precisa criar uma área de swap. Para a maioria dos VPS modernos, usar um arquivo é preferível a uma partição dedicada, pois permite redimensionamento dinâmico.

Atenção: Certifique-se de ter espaço em disco suficiente. O tamanho recomendado varia conforme o uso:

  • Até 2GB de RAM: Swap igual à RAM.
  • Entre 2GB e 8GB de RAM: Swap metade da RAM.
  • Mais de 8GB de RAM: Swap entre 4GB e 8GB (dependendo da necessidade de hibernação, que não se aplica a servidores).

Vamos criar um arquivo de swap de 2 Gigabytes. Ajuste o valor conforme sua necessidade.

  1. Crie o arquivo com espaço reservado usando fallocate. Este método é instantâneo e não fragmenta o disco.
sudo fallocate -l 2G /swapfile

Se o comando fallocate falhar (comum em alguns sistemas de arquivos como F2FS), use dd:

sudo dd if=/dev/zero of=/swapfile bs=1G count=2
  1. Ajuste as permissões do arquivo. O swap não deve ser acessível por usuários comuns.
sudo chmod 600 /swapfile
  1. Formate o arquivo como área de swap:
sudo mkswap /swapfile
  1. Ative o swap imediatamente sem precisar reiniciar:
sudo swapon /swapfile
  1. Verifique se foi ativado corretamente:
swapon --show

Passo 2: Tornando a Configuração Permanente

A ativação feita acima é temporária. Se você reiniciar o servidor, o swap será desativado. Para garantir que o arquivo seja montado automaticamente na inicialização, precisamos editá-lo no /etc/fstab.

  1. Abra o arquivo de sistema de arquivos com um editor de texto (ex: nano):
sudo nano /etc/fstab
  1. Adicione a seguinte linha ao final do arquivo:
/swapfile none swap sw 0 0

O campo sw define as opções padrão de swap. Salve o arquivo (Ctrl+O, Enter) e saia (Ctrl+X). Agora, seu servidor usará o swap após cada reinicialização.

Entendendo o Parâmetro vm.swappiness

Agora que o swap está configurado, precisamos definir quando o kernel deve usá-lo. O Linux controla isso através do parâmetro vm.swappiness, que pode assumir valores entre 0 e 100.

  • Valor 100 (Padrão em muitas distribuições): Indica ao kernel para usar a swap agressivamente, movendo processos da RAM para o disco mesmo quando há memória livre disponível. Isso pode ser útil em desktops para manter a interface responsiva, mas é prejudicial para servidores de alta performance.
  • Valor 0: Diz ao kernel para não trocar páginas de memória para o disco exceto quando for absolutamente necessário para evitar um erro de falta de memória (OOM). O kernel tentará matar processos antes de usar swap extensivamente.

O valor ideal para servidores web, bancos de dados e aplicações de alto tráfego geralmente fica entre 10 e 60, dependendo da criticidade da latência.

Passo 3: Ajustando o Swappiness Dinamicamente

Você pode verificar o valor atual com:

cat /proc/sys/vm/swappiness

Para alterar o valor em tempo real (útil para testes), use sysctl. Vamos definir um valor mais conservador, como 10, que prioriza o uso da RAM física.

sudo sysctl vm.swappiness=10

Essa mudança entra em vigor imediatamente e afeta todos os processos a partir deste momento. Você pode monitorar o impacto observando o uso de memória com htop ou vmstat 1.

Passo 4: Tornando a Otimização Permanente

Assim como no arquivo fstab, a alteração via sysctl é perdida após o reboot. Para persistir a configuração, devemos editar o arquivo de configurações do kernel.

  1. Abra o arquivo de sysctl:
sudo nano /etc/sysctl.conf
  1. Vá até o final do arquivo e adicione a seguinte linha:
vm.swappiness=10

Salve e feche. A partir de agora, seu Ubuntu Server manterá essa política de memória em todas as inicializações.

Análise de Performance e Monitoramento

Após aplicar essas configurações, é fundamental monitorar se a otimização está beneficiando o servidor. O uso de swap não deve ser constante. Se você notar que o iowait (tempo de espera por E/S do disco) está alto, pode ser sinal de que o servidor está "trocando" excessivamente, indicando que a RAM física é insuficiente para a carga de trabalho.

Comandos úteis para monitoramento contínuo:

  • iostat -x 1: Mostra estatísticas detalhadas de disco. Fique atento à coluna %util. Valores consistentemente altos indicam gargalo de disco, possivelmente causado por swap.
  • vmstat 1: Exibe informações de memória virtual e processos a cada segundo. Observe as colunas si (swap in) e so (swap out). Se esses valores forem diferentes de zero frequentemente, seu sistema ainda está pressionando a swap.

Cenários Específicos: Bancos de Dados vs. Aplicações Web

A otimização de memória não é "tamanho único". Diferentes cargas de trabalho exigem ajustes distintos:

Bancos de Dados (MySQL, PostgreSQL)

Bancos de dados dependem fortemente da velocidade de acesso aos dados. O swappiness deve ser mantido baixo (próximo de 10 ou até 1, dependendo do tuning específico do banco). O objetivo é manter o buffer pool do banco na RAM física a todo custo. Se o banco começar a usar swap, a latência das consultas disparará.

Servidores Web (Nginx, Apache)

Servidores web podem tolerar um pouco mais de swap, pois muitas conexões são efêmeras. Um valor entre 10 e 20 é geralmente seguro. Isso permite que o sistema absorva picos de memória sem derrubar processos críticos imediatamente.

Containers Docker/Kubernetes

Se você roda containers, o gerenciamento de cgroups pode interagir com o swap. Em clusters Kubernetes, é comum desabilitar completamente o swap no nó host para garantir previsibilidade de recursos alocados aos pods. Verifique as documentações específicas da sua orquestração.

Boas Práticas e Armadilhas Comuns

Não confie apenas na quantidade de RAM: Ter 32GB de RAM não significa que você não precisa de swap. Se um processo tiver um vazamento de memória (memory leak), ele crescerá até consumir toda a RAM. Sem swap, o OOM Killer matará processos aleatórios para liberar espaço. Com swap configurado e swappiness baixo, o sistema tem uma "zona de amortecimento" onde pode tentar mitigar ou identificar o problema antes do colapso total.

Evite SSDs degradados: O uso excessivo de swap em SSDs antigos com poucas escritas restantes (TBW) pode reduzir a vida útil do disco. Monitore a saúde do disco (smartctl) se o uso de swap for inevitável e frequente.

Teste em ambiente de staging: Antes de aplicar vm.swappiness=0 ou valores muito baixos em produção, teste em um servidor idêntico. Em alguns casos raros, um valor zero pode causar travamentos se o sistema não conseguir liberar memória cache rapidamente o suficiente durante picos súbitos.

Conclusão

A otimização de swap e swappiness no Ubuntu Server é uma tarefa essencial para qualquer sysadmin que busca maximizar a performance de VPS. Ao configurar um arquivo de swap adequado e ajustar o vm.swappiness para valores mais conservadores (como 10), você garante que seu servidor priorize a memória RAM rápida, evitando degradação de performance causada pelo acesso lento ao disco.

Lembre-se: a configuração ideal depende da sua carga de trabalho. Monitore constantemente o uso de E/S e memória. A ferramenta mais poderosa não é apenas aplicar um comando, mas entender o comportamento do seu sistema sob carga e ajustar os parâmetros conforme necessário. Com essas práticas, você transforma um servidor Ubuntu padrão em uma máquina robusta, estável e preparada para lidar com demandas reais de produção.

Aplique as configurações deste tutorial, monitore os resultados por algumas semanas e ajuste finamente conforme a necessidade específica da sua aplicação. Uma infraestrutura bem gerenciada é a diferença entre um servidor que responde em milissegundos e um que fica à mercê do gargalo de disco.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000