Swap na VPS Linux: quando e como configurar

Swap é espaço em disco usado como extensão da RAM quando a memória física acaba. Em VPS com Docker, swap evita que o OOM killer (Out Of Memory killer) mate processos aleatórios quando a memória enche. Mas swap em SSD é lento, é um safety net, não um substituto para RAM insuficiente. Configure para proteger o sistema, não para compensar falta de memória.

Verificar se já existe swap configurado

VPS Ubuntu da Runstack não vêm com swap por padrão. Verifique a situação atual:

bash
# Ver memória e swap disponíveis
free -h

# Detalhe do swap
swapon --show

# Se não aparecer nada no swapon --show, não há swap configurado
# Verificar pelo arquivo de swap
ls -lh /swapfile 2>/dev/null || echo "Sem swapfile"

Criar swapfile (método mais simples)

Swapfile é um arquivo regular usado como swap, mais flexível que uma partição dedicada e pode ser criado sem reparticionar o disco:

bash
# Criar swapfile de 2 GB (ajuste o tamanho conforme necessário)
sudo fallocate -l 2G /swapfile

# Definir permissões corretas (somente root)
sudo chmod 600 /swapfile

# Formatar como swap
sudo mkswap /swapfile

# Ativar o swap imediatamente
sudo swapon /swapfile

# Verificar se está ativo
swapon --show
free -h

# Tornar permanente (sobrevive a reboot)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Configurar swappiness

swappiness controla com que agressividade o kernel move dados da RAM para swap. O padrão (60) é alto para servidores, reduza para usar swap apenas em emergências:

bash
# Ver swappiness atual (padrão: 60)
cat /proc/sys/vm/swappiness

# Definir swappiness = 10 (só usa swap quando RAM > 90% ocupada)
sudo sysctl vm.swappiness=10

# Tornar permanente
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

# Para VPS com SSD NVMe — também ajustar vfs_cache_pressure
# (mantém mais metadados de sistema de arquivos em RAM)
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Dimensionamento: quanto swap configurar

A quantidade de swap depende da RAM total e do uso:

bash
# Regras gerais:
# RAM 1 GB  → swap 2 GB  (100% de cobertura extra)
# RAM 2 GB  → swap 2 GB  (safety net simples)
# RAM 4 GB  → swap 2 GB  (não precisa de muito)
# RAM 8 GB+ → swap 1-2 GB ou nenhum (com monitoramento ativo)

# Verificar se o swap está sendo usado (% de uso)
free -h
# Se "Swap: used" > 0, a RAM real está chegando no limite
# Se swap usado > 50%, considere fazer upgrade de RAM

# Monitorar uso de swap por processo
for file in /proc/*/status; do
  awk '/VmSwap/{swap=$2} /Name/{name=$2} END{if(swap>0)print name, swap"kB"}' "$file"
done 2>/dev/null | sort -k2 -rn | head -10

Remover o swap (quando não é necessário)

Se você fizer upgrade de RAM ou decidir que o swap não é necessário, remova corretamente:

bash
# Desativar o swap imediatamente
sudo swapoff /swapfile

# Verificar que está desativado
swapon --show   # deve estar vazio

# Remover do fstab
sudo sed -i '/swapfile/d' /etc/fstab

# Deletar o arquivo
sudo rm /swapfile

# Verificar espaço recuperado
df -h /

Não quer configurar manualmente?

Implante o VPS em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Perguntas frequentes

Em teoria, writes frequentes no swap desgastam o SSD mais rápido. Na prática, com swappiness=10, o swap raramente é usado, só em picos de memória. A vida útil dos SSDs modernos (incluindo NVMe) em datacenter é medida em petabytes de escrita, muito mais do que o swap causaria em anos de uso normal.

Por padrão sim, se o host tem swap configurado. Para desabilitar swap em um container específico: --memory-swap="200m" --memory="200m" (igualar memory e memory-swap desabilita o swap para aquele container). No docker-compose.yml: memswap_limit: "200m" junto com mem_limit: "200m".

Parcialmente. Swap adiciona "buffer" antes do OOM killer agir, mas não resolve o problema de falta de RAM. A solução correta é: (1) identificar qual container usa mais memória com docker stats, (2) configurar limites de memória por container no docker-compose.yml, (3) considerar upgrade de RAM se os limites forem muito restritivos.

Sim. Desative o swap atual (swapoff /swapfile), delete o arquivo, crie um novo maior (fallocate -l 4G /swapfile), formate (mkswap /swapfile) e ative novamente (swapon /swapfile). Atualize o /etc/fstab se necessário. Todo o processo leva ~30 segundos sem reboot.

free -h mostra o total, usado e livre. A linha "available" é o que está disponível para novos processos (inclui cache que pode ser liberado). htop no topo mostra barras visuais de CPU, RAM e swap. Uma VPS de 2 GB com 1.8 GB "used" mas 800 MB "available" está em situação saudável, o SO usa cache agressivamente.