Como configurar swap em servidores Linux de produção

1. Introdução ao swap em servidores de produção

Swap é uma área de armazenamento em disco que o kernel do Linux utiliza como extensão da memória RAM. Quando a memória física é insuficiente, páginas de memória pouco utilizadas são movidas para o swap, liberando RAM para processos ativos. Em servidores de produção, o swap atua como uma rede de segurança crítica contra o temido OOM Killer (Out Of Memory Killer), que pode derrubar processos essenciais como bancos de dados, servidores web ou aplicações em tempo real.

Diferente de ambientes de desenvolvimento, onde um servidor travado pode ser reiniciado sem grandes consequências, em produção cada segundo de downtime representa perda financeira e de reputação. O swap não substitui RAM insuficiente — ele é um mecanismo de contingência que evita falhas catastróficas enquanto você dimensiona os recursos adequadamente.

2. Planejamento do tamanho e tipo de swap

O dimensionamento de swap em produção requer análise cuidadosa. Regras antigas sugeriam o dobro da RAM, mas workloads modernos com memória abundante tornaram essa abordagem obsoleta. A recomendação atual da Red Hat e Canonical para servidores de produção é:

  • RAM ≤ 2 GB: swap = 2x RAM
  • RAM 2-8 GB: swap = 1x RAM
  • RAM 8-64 GB: swap = 0,5x RAM
  • RAM > 64 GB: swap = 4-8 GB (dependendo da workload)

Para servidores de produção, a escolha entre partição dedicada e arquivo swap depende do cenário:

  • Partição swap: desempenho ligeiramente superior, isolamento físico, mas difícil de redimensionar
  • Arquivo swap: flexível, fácil de criar/remover, ideal para ambientes cloud e containers

Em discos SSD, a latência do swap é menor, mas o desgaste por escritas frequentes deve ser monitorado. Em HDDs, o swap pode tornar-se um gargalo severo — evite usar swap em discos rotacionais para servidores com alta demanda de memória.

3. Pré-requisitos e verificação do sistema

Antes de configurar swap, verifique o estado atual do sistema:

# Verificar swap ativo
swapon --show

# Verificar memória e swap
free -h

# Verificar partições e espaço disponível
df -h

# Verificar arquivos de swap existentes
cat /proc/swaps

Para criar um arquivo swap com segurança, você precisa de espaço em disco suficiente e permissões adequadas. O arquivo swap deve ter permissão 600 (apenas root pode ler/escrever) para evitar que usuários maliciosos explorem dados sensíveis que possam estar presentes nas páginas de memória trocadas.

4. Criação de swap em arquivo (método recomendado para produção)

O método com arquivo swap é o mais flexível e seguro para servidores de produção modernos. Prefira fallocate para sistemas de arquivos que o suportam (ext4, xfs), pois é mais rápido que dd:

# Criar arquivo swap de 4 GB (exemplo para servidor com 8 GB RAM)
fallocate -l 4G /swapfile

# Ajustar permissões
chmod 600 /swapfile

# Formatar como área de swap
mkswap /swapfile

# Ativar swap
swapon /swapfile

# Verificar ativação
swapon --show
free -h

Se fallocate não estiver disponível ou seu sistema de arquivos não suportar, use dd:

dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress

A diferença prática é que fallocate aloca espaço sem escrever dados (alocação esparsa), enquanto dd realmente escreve zeros, sendo mais lento mas compatível com todos os sistemas de arquivos.

5. Criação de swap em partição dedicada

Para servidores onde o desempenho máximo é crítico, uma partição swap dedicada pode ser preferível:

# Identificar o disco (exemplo: /dev/sdb)
fdisk /dev/sdb

# Criar partição do tipo 82 (Linux swap)
# Exemplo de comandos dentro do fdisk:
# n (nova partição)
# p (primária)
# 1 (número da partição)
# Enter (primeiro setor - padrão)
# +4G (tamanho)
# t (mudar tipo)
# 82 (Linux swap)
# w (escrever e sair)

# Formatar como swap
mkswap /dev/sdb1

# Ativar
swapon /dev/sdb1

6. Configuração de persistência no boot

Para que o swap seja ativado automaticamente após reinicializações, adicione a entrada no /etc/fstab:

Para arquivo swap:

# Editar /etc/fstab e adicionar:
/swapfile none swap sw 0 0

Para partição swap (usando UUID para maior segurança):

# Obter UUID
blkid /dev/sdb1

# Adicionar no /etc/fstab:
UUID=seu-uuid-aqui none swap sw 0 0

Ajuste o parâmetro vm.swappiness para controlar a agressividade do swap. Valores baixos (0-10) priorizam RAM, valores altos (60-100) priorizam swap:

# Adicionar no /etc/sysctl.conf
vm.swappiness=10
vm.vfs_cache_pressure=50

# Aplicar imediatamente
sysctl -p

Para servidores de produção com RAM suficiente, swappiness=10 é recomendado — o sistema só usará swap quando estiver realmente necessário.

7. Monitoramento e ajustes finos em produção

Monitore o uso de swap continuamente:

# Verificar uso de swap por processo
for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file 2>/dev/null; done | sort -k 2 -n -r | head -10

# Monitorar com vmstat (swap in/out)
vmstat 5

# Monitorar com sar
sar -S 5

Para remover swap com segurança sem interromper serviços:

# Desativar swap (move páginas de volta para RAM)
swapoff /swapfile

# Verificar se há RAM suficiente antes
free -h

# Remover arquivo
rm /swapfile

# Remover entrada do /etc/fstab

8. Boas práticas e cenários avançados

Múltiplas áreas de swap com prioridades:

# Adicionar no /etc/fstab
/swap1 none swap sw,pri=10 0 0
/swap2 none swap sw,pri=5 0 0

Swap em ambientes cloud (AWS, GCP, Azure):
- Use discos efêmeros (instance store) para swap, não EBS volumes (custo e latência)
- Em instâncias com RAM suficiente, considere desabilitar swap completamente
- Configure scripts de inicialização (cloud-init) para criar swap automaticamente

Swap em containers e VMs:
- Em containers Docker, o swap é herdado do host — configure no nível do host
- Em VMs KVM, aloque swap dentro do guest, não no hypervisor
- Para Kubernetes, use limits.memory e evite swap nos nós (kubelet requer swap desabilitado)

Remoção segura em servidores em produção:

# Verificar processos usando swap
# Desativar gradualmente
swapoff -a

# Se falhar por falta de RAM, aumente RAM ou adicione swap temporário
# Reativar com novo tamanho

Lembre-se: swap não é solução para falta de RAM. Se seu servidor está usando swap constantemente, é sinal de que precisa de mais memória física. Use swap como segurança, não como muleta.

Referências