Como configurar swap no Linux Ubuntu: quando precisa e como dimensionar
Aprenda a configurar swap no Linux Ubuntu como buffer pra VPS com pouca RAM. Veja quando precisa, como dimensionar o swapfile e ajustar swappiness pra produção.
VPS com 1 ou 2 GB de RAM frequentemente entra em situações onde um build do npm, uma query pesada no PostgreSQL ou um spike de tráfego empurra a memória pro limite. Sem swap configurado, o kernel Linux dispara o OOM killer e mata o processo que estiver consumindo mais — geralmente o serviço que você mais precisa rodando. Com swap, o sistema tem um buffer pra absorver picos esporádicos antes de chegar nesse extremo.
Swap não é mágica e não substitui RAM. Quando o kernel começa a paginar ativamente, performance degrada brutalmente — leitura de swap em SSD NVMe ainda é centenas de vezes mais lenta que RAM. Mas como rede de segurança, swap previne crashes que arruinariam o uptime do servidor por causa de uma exceção momentânea.
Este tutorial cobre o fluxo completo: identificar se sua VPS precisa de swap, criar e ativar um swapfile dimensionado corretamente, ajustar swappiness pra workloads de servidor e remover ou redimensionar se necessário. Alvo: sysadmin Linux administrando Ubuntu 22.04 ou 24.04 em VPS com pouca RAM. Tempo de execução: 10-15 minutos.
Pré-requisitos
Ubuntu 22.04 LTS ou 24.04 LTS com acesso sudo, sessão SSH ativa e pelo menos 2 GB livres em disco (pra um swapfile de 2 GB com folga). Você também precisa saber a memória RAM atual da VPS — free -h mostra.
Antes de criar swap, confirme o estado atual de memória e swap da máquina. VPS modernas frequentemente já vêm com swap configurado pelo provedor ou pela imagem base — verificar antes evita criar swap duplicado.
1 GB 0 (não vem) /swapfile 600 (root only) Quando criar swap na sua VPS
Nem toda VPS precisa de swap. A decisão depende da RAM disponível e do perfil da carga. Para servidores com 8 GB+ de RAM rodando aplicações dimensionadas corretamente, swap raramente é tocado e pode até atrapalhar (ver seção de swappiness).
Cenários onde swap faz sentido:
- VPS com 1-4 GB de RAM rodando stack web (nginx + PHP-FPM + MySQL/Postgres)
- Servidor que faz builds esporádicos (npm install, composer install, docker build) que consomem RAM acima do steady-state
- Aplicações com picos imprevisíveis (importação de arquivo grande, processamento de imagem, geração de relatório)
- Bancos de dados pequenos rodando junto com app na mesma VPS sem cgroups isolando recursos
Cenários onde swap não resolve:
- Aplicação que precisa de RAM constante acima do disponível — adicione RAM ou faça upgrade da VPS
- Servidor latency-sensitive (gateway, proxy reverso de alto QPS) onde qualquer swap mata o p99
- Banco de dados grande em produção — configure cgroups e swappiness=1 ou desative swap completamente pra evitar latência de I/O imprevisível
Verifique RAM e swap atuais:
free -hOutput típico de VPS sem swap:
total used free shared buff/cache available
Mem: 1.9Gi 420Mi 180Mi 2.0Mi 1.3Gi 1.4Gi
Swap: 0B 0B 0BSe a linha Swap mostra valores diferentes de zero, swap já existe — pule pra seção “Ajustando swappiness”.
Verifique espaço livre em disco antes de alocar o swapfile:
df -h /Confirme que / tem pelo menos 3-4 GB livres. O swapfile vai consumir o tamanho alocado integralmente — não é arquivo esparso.
Criando o swapfile
Vamos criar um swapfile de 2 GB em /swapfile. Esse tamanho cobre a grande maioria dos casos de VPS de 2-4 GB de RAM. Se sua VPS tem só 1 GB de RAM, ajuste pra 1 GB. Para 4 GB+ de RAM, 2 GB de swap continua sendo suficiente — não escale linearmente.
Aloque o arquivo com fallocate:
sudo fallocate -l 2G /swapfilefallocate reserva o espaço instantaneamente sem zerar bloco a bloco (diferente de dd, que demoraria minutos). Em sistemas de arquivos modernos (ext4, xfs), funciona sem problemas.
Restrinja permissões do arquivo:
sudo chmod 600 /swapfileSwap contém conteúdo de memória de processos — incluindo senhas, tokens e dados sensíveis que estavam em RAM. Deixar legível por outros usuários é uma falha grave de segurança.
Formate o arquivo como área de swap:
sudo mkswap /swapfileOutput esperado:
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=abc123...Ative o swap:
sudo swapon /swapfileSem output em sucesso. Confirme com:
sudo swapon --show
free -hA linha Swap em free -h agora mostra 2.0Gi total.
O comando swapon ativa o swap imediatamente, mas a configuração não sobrevive ao reboot. Sem editar /etc/fstab (próximo passo), você perde o swap toda vez que a VPS reinicia.
Adicione o swap ao /etc/fstab pra montar automaticamente no boot:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabReveja o arquivo:
sudo cat /etc/fstabA última linha deve ser exatamente /swapfile none swap sw 0 0.
Erro de sintaxe em /etc/fstab impede o boot da VPS — você precisa de acesso ao console serial do provedor pra recuperar. Use sudo tee -a (append) em vez de editor pra evitar substituir o arquivo inteiro acidentalmente.
Ajustando swappiness pra workloads de servidor
Swappiness controla quão agressivamente o kernel paginará memória pra swap. Valores vão de 0 (evita swap ao máximo) a 100 (paginiza tão cedo quanto possível). Default do Ubuntu é 60, otimizado pra desktop onde swap libera RAM pra cache de disco que melhora UX. Em servidor, esse comportamento é contraprodutivo — você quer que apps rodem em RAM real, mesmo que custe um pouco de cache.
Verifique o valor atual:
cat /proc/sys/vm/swappinessA maioria das instalações Ubuntu retorna 60.
Reduza temporariamente pra 10 (até o próximo reboot):
sudo sysctl vm.swappiness=10Output:
vm.swappiness = 10Persista a mudança em /etc/sysctl.conf pra sobreviver ao reboot:
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.confConfira a configuração após o próximo boot rodando cat /proc/sys/vm/swappiness — deve mostrar 10.
Em VPS rodando PostgreSQL, MySQL ou MongoDB como serviço principal, considere swappiness=1. Bancos gerenciam buffer pool próprio em RAM e perdem performance brutalmente quando o kernel decide paginar páginas quentes. Valor 0 é mais agressivo ainda mas pode causar OOM em picos — 1 é o equilíbrio prático.
Verificação
Confirme que o swap está ativo, dimensionado corretamente e configurado pra persistir.
Estado completo de memória e swap:
free -h
swapon --show
cat /proc/sys/vm/swappinessVocê deve ver swap de 2 GB ativo, prioridade -2 (default), e swappiness=10.
Verifique se vai montar no boot:
grep swapfile /etc/fstabLinha esperada: /swapfile none swap sw 0 0.
Monitore uso real durante carga. Use vmstat pra ver atividade de swap:
vmstat 1 5Foque nas colunas si (swap in, KB/s lidos do swap) e so (swap out, KB/s escritos no swap). Em VPS saudável, ambas ficam em 0 a maior parte do tempo. Atividade ocasional em picos é normal. Atividade constante de centenas de KB/s indica falta de RAM real.
Resolução de problemas
”swapon: /swapfile: insecure permissions 0644”
Permissão do arquivo está aberta demais. Corrija com sudo chmod 600 /swapfile e tente ativar de novo. Erro comum se você usou dd em vez de fallocate sem ajustar permissão depois.
”fallocate: fallocate failed: Operation not supported”
Algumas VPS usam sistemas de arquivos antigos ou filesystem em camada (overlay no Docker, por exemplo) que não suportam fallocate. Substitua pelo método clássico com dd:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 status=progress
Demora 30-60s em SSD. Depois segue normalmente com chmod, mkswap e swapon.
Swap ativo mas free -h ainda mostra 0B
Confirme que o swapfile foi formatado com mkswap antes do swapon. Se você pulou a etapa de formatação, swapon falha silenciosamente em alguns kernels. Rode sudo swapoff /swapfile, sudo mkswap /swapfile, sudo swapon /swapfile.
Sistema lento após habilitar swap
Provavelmente swappiness está alto e o kernel está paginando páginas quentes. Reduza pra 10 conforme a seção anterior. Se o sistema continua lento mesmo com swappiness baixo e vmstat mostra si/so constante, a RAM é genuinamente insuficiente — considere upgrade da VPS.
Próximos passos
Com swap configurado, o servidor ganha resiliência contra picos esporádicos de memória. Próximos pontos pra fechar a base de uma VPS de produção:
- Configure limites de memória por serviço com systemd (
MemoryMax=em unit files) pra evitar que um processo derrube outros - Monitore swap usage continuamente via Netdata, Grafana ou sistema próprio — alertar quando
si/soultrapassa threshold - Em VPS rodando containers, configure
--memorye--memory-swapno Docker pra isolar workloads - Avalie se a aplicação tem leak real de memória — swap mascara o sintoma mas não resolve a causa
- Se você está colocando isso em produção, uma VPS Hostini já vem com NVMe rápido (latência baixa de swap quando precisa) e dimensionamento de RAM transparente, evitando a maioria dos cenários onde swap salva o servidor.
Perguntas frequentes
Swap substitui a RAM em servidores de produção?
Não. Swap é storage (SSD/NVMe) usado como extensão da memória — ordens de magnitude mais lento que RAM real (latência em centenas de microssegundos contra dezenas de nanossegundos). Serve como buffer pra picos esporádicos e pra evitar OOM kill, não pra rodar a carga normal. Se a aplicação está em swap constante, falta RAM — adicione memória física.
Qual o tamanho ideal de swap pra uma VPS?
Regra prática moderna: 1 GB de swap pra VPS com 1-2 GB de RAM, 2 GB pra VPS com 2-4 GB, e 2-4 GB pra qualquer servidor com 4+ GB. A regra antiga de '2x a RAM' veio da era do hibernate em desktops e não faz sentido em servidor. Não passe de 4 GB de swap em VPS de produção — se está usando isso, falta RAM.
Devo usar swapfile ou partição de swap?
Swapfile. Em VPS provisionada com layout de disco pronto, criar partição é complicado (envolve repartition) e oferece zero vantagem de performance moderna. Swapfile é redimensionável, removível e funciona idêntico em workload real. Use partição de swap só em servidor físico com disco dedicado pra swap.
O que é swappiness e qual valor usar em servidor?
Swappiness (0-100) controla a agressividade do kernel ao mover páginas inativas pra swap. Default do Ubuntu é 60, otimizado pra desktop. Em servidor, use 10 — só faz swap quando pressão de memória é real, mantendo cache de disco em RAM o máximo possível. Para banco de dados (PostgreSQL, MySQL), use 1 ou até 0 com cgroups configurados.
Como remover o swap se não precisar mais?
Desative com sudo swapoff /swapfile, remova a linha do /etc/fstab pra não montar no boot, e apague o arquivo com sudo rm /swapfile. Confirme com swapon --show — não deve retornar nada. Faça isso antes de redimensionar (não dá pra resize um swapfile ativo).
Por que minha VPS está usando swap mesmo com RAM livre?
Comportamento normal. O kernel move páginas inativas pra swap proativamente pra liberar RAM pra cache de disco, mesmo sem pressão imediata. Com swappiness=60 (default), isso é bem agressivo. Reduza pra 10 se incomoda. Só vire alerta quando swap está sendo lido/escrito ativamente (vmstat mostrando si/so > 0 constante) — aí sim falta RAM.