A memória é o recurso que mais define o tamanho de um servidor: é ela que falta primeiro, e quando falta, o servidor não fica apenas lento, ele interrompe serviços. Este guia traz a regra de cálculo, o que cada componente de uma aplicação consome, perfis típicos e a forma de medir em um servidor que já está rodando.
available do free -h, não a coluna free.Um servidor não consome memória “em geral”: cada programa em execução reserva uma parte dela enquanto roda. O cálculo parte, portanto, da lista dos processos presentes o tempo todo e depois acrescenta o pico e uma margem:
Memória a prever = (sistema + serviços permanentes + pico das tarefas pontuais) × 1,25
As ordens de grandeza abaixo valem para uma aplicação de porte comum, medida em produção. Elas dão um ponto de partida; a medição em sua própria aplicação, descrita mais adiante, sempre tem a última palavra.
| Componente | Memória típica | O que a faz variar |
|---|---|---|
| Nginx, Caddy (servidor web, proxy) | 10 a 50 MB | Quase fixa: o número de conexões pesa pouco. |
| PHP-FPM (WordPress, Laravel, Symfony) | 40 a 80 MB por processo | O número de processos, limitado por pm.max_children: 10 processos, 400 a 800 MB. |
| Node.js (API, Next.js, NestJS) | 60 a 300 MB por processo | O número de processos (modo cluster, PM2) e o tamanho do heap, limitado por --max-old-space-size. |
| Python (Django, FastAPI, Flask) | 80 a 200 MB por processo | O número de workers do Gunicorn ou do Uvicorn, e as bibliotecas carregadas: pandas ou um modelo de aprendizado de máquina acrescentam centenas de MB. |
| Java (Spring Boot) | 300 MB a 1 GB por aplicação | O tamanho máximo do heap: por padrão, a JVM reserva para si um quarto da memória que enxerga. |
| Go, Rust | 10 a 100 MB | Os dados que a própria aplicação mantém em memória. |
| PostgreSQL | 25% da memória para shared_buffers, mais alguns MB por conexão | O volume de dados consultados com frequência, o número de conexões, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, 128 MB por padrão | Em um servidor dedicado ao banco, esse buffer costuma ocupar até 80% da memória. |
| Redis | O tamanho dos dados, mais as estruturas dele | Durante uma gravação em disco, as páginas modificadas são duplicadas: até o dobro no pior caso. |
| Elasticsearch, OpenSearch | Pelo menos 2 GB de heap | O heap não passa da metade da memória: o resto serve de cache de arquivos. |
Um pico aparece com frequência nas aplicações JavaScript: o build. npm run build em um projeto Next.js, Nuxt ou Angular costuma pedir 1 a 2 GB sozinho, durante alguns minutos, além do que já está rodando. Fazer o build no servidor é dimensionar para esse pico; fazer o build em seu computador ou em sua integração contínua e enviar só o resultado é evitá-lo.
O mesmo raciocínio vale para os contêineres Docker: cada contêiner é um conjunto de processos como os outros, e o daemon do Docker acrescenta o próprio consumo. docker stats mostra quanto cada um ocupa.
Estes perfis somam os componentes anteriores, pico e margem incluídos. Eles supõem uma aplicação de porte comum e o tráfego de um lançamento; um banco de dados volumoso ou um tráfego alto e constante empurram o número para cima.
| O que roda no servidor | Memória a prever |
|---|---|
| Site estático, proxy, pequeno bot ou script agendado | 1 a 2 GB |
| Um site WordPress com MariaDB e cache de páginas | 2 GB |
| Uma loja WooCommerce, ou vários sites WordPress | 4 GB |
| Uma API Node.js ou Python com PostgreSQL, primeiros usuários | 4 GB |
| Uma aplicação Next.js com build no servidor, a API dela e um banco PostgreSQL | 6 a 8 GB |
| Várias aplicações em contêineres, homologação e produção | 8 GB |
| Um banco de dados de várias dezenas de GB, consultado intensamente | 16 GB ou mais |
| Um modelo de linguagem de 7 a 8 bilhões de parâmetros executado no servidor | 16 GB |
Uma aplicação que chama um modelo de IA por API (OpenAI, Anthropic, Mistral) se dimensiona como qualquer aplicação web: o modelo roda no fornecedor, e seu servidor aguarda a resposta. É a execução do modelo no próprio servidor que muda a escala.
Em um servidor em produção, a medição substitui a estimativa. Três comandos mostram onde você está:
free -h
ps aux --sort=-rss | head -n 15
vmstat 5 5
free -h: leia a coluna available, a memória realmente disponível para iniciar novos programas. A coluna free quase sempre está baixa, e isso é normal: o Linux preenche a memória não usada com o cache de arquivos (buff/cache), que ele devolve assim que um programa precisa.ps aux --sort=-rss: os processos ordenados pela memória ocupada (coluna RSS, em kilobytes). É aqui que se vê quanto pesa cada worker PHP ou Node.js.vmstat 5 5: cinco leituras com cinco segundos de intervalo. Valores diferentes de zero nas colunas si e so, leitura após leitura, indicam um servidor que troca páginas com o swap: falta memória.Meça no horário de maior carga do dia, e durante as tarefas pontuais: build, backup, importação. O que conta é o pico.
Um servidor sem memória não fica lento aos poucos. Quando não há mais nada a liberar, o kernel Linux aciona o OOM killer (out of memory): ele escolhe um processo, em geral o que ocupa mais memória, e o encerra na hora. Em um servidor de aplicação, muitas vezes é o banco de dados.
Os sintomas: erros 502 ou 503 de vez em quando, um serviço que reinicia sem motivo aparente, um build que para com Killed. Os logs confirmam:
journalctl -k | grep -i "out of memory"
systemctl status nome-do-servico
Na saída do systemctl status, a mensagem Failed with result 'oom-kill' indica um serviço encerrado por falta de memória.
O swap, quando o servidor tem, adia esse momento transferindo para o disco a memória menos usada. Ele serve de rede de segurança, não de capacidade: um servidor que depende do swap o tempo todo responde várias vezes mais devagar, mesmo em um SSD NVMe.
As soluções, da mais simples à mais duradoura: reduzir o número de processos da aplicação (pm.max_children, workers do Gunicorn), fazer o build fora do servidor, limitar a memória do banco de dados e, depois, passar para um tamanho superior.
A memória não é o único recurso: o processador conta para o que calcula (build, processamento de imagens, execução de um modelo de IA), o disco para o banco de dados e os arquivos. Em uma aplicação web, porém, é quase sempre a memória que define o tamanho.
O VPS Pro tem seis tamanhos, com processadores Intel Xeon, memória ECC e SSD NVMe espelhados, e passa para o tamanho superior a qualquer momento, sem reinstalação. A Assistência integral está incluída: conte o que seu servidor vai rodar, recomendamos o tamanho e, a cada dúvida, diagnosticamos e indicamos o que fazer, do sistema até o código de sua aplicação.
Um site estático, um proxy ou um pequeno script rodam em 1 a 2 GB. Quando um banco de dados e uma aplicação (PHP, Node.js, Python) dividem o servidor, conte 2 GB para um site WordPress e 4 GB para uma aplicação sob medida com PostgreSQL.
2 GB para um site com MariaDB e cache de páginas, 4 GB para uma loja WooCommerce ou vários sites. O número de processos PHP-FPM é o primeiro ajuste: cada um ocupa 40 a 80 MB.
Não. O swap evita um encerramento brusco quando a memória está cheia, mas um servidor que depende dele o tempo todo responde várias vezes mais devagar, mesmo em um SSD NVMe. É uma rede de segurança; o tamanho se escolhe pela memória.
Porque o Linux usa a memória não utilizada como cache de arquivos. Esse cache é liberado assim que um programa precisa de memória. A coluna a ler é available, que mostra a memória realmente disponível.
Conte 1 a 2 GB só para o build, além do que já roda no servidor. Fazer o build em seu computador ou em sua integração contínua e enviar só o resultado evita esse pico.
Simafri
Vamos falar de seu site
Conte para a gente sobre seu projeto em poucas palavras: responderemos rapidamente.
Obrigado! O seu pedido foi enviado. Responderemos em breve.
Prefere o e-mail? Escreva para a gente em support@simafri.com.