A memória é o recurso que mais vezes define o tamanho de um servidor. É a primeira a faltar, e quando falta, o servidor não se limita a abrandar: interrompe serviços. Este guia dá a regra de cálculo, o que consome cada componente de uma aplicação, perfis típicos e a forma de medir num servidor que já está a funcionar.
available de free -h, não a coluna free.Um servidor não consome memória «em geral»: cada programa em execução reserva uma parte, enquanto estiver a correr. O cálculo parte, por isso, da lista dos processos presentes em permanência, 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 dimensão corrente, medida em produção. Dão um ponto de partida; a medição na sua própria aplicação, descrita mais abaixo, tem sempre 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 ligaçõ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 Gunicorn ou Uvicorn, e as bibliotecas carregadas: o pandas ou um modelo de aprendizagem automática acrescentam centenas de MB. |
| Java (Spring Boot) | 300 MB a 1 GB por aplicação | O tamanho máximo do heap: por predefinição, a JVM reserva para si um quarto da memória que vê. |
| 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 ligação | O volume de dados consultados com frequência, o número de ligações, work_mem. |
| MySQL, MariaDB | innodb_buffer_pool_size, 128 MB por predefinição | Num servidor dedicado à base de dados, este buffer chega habitualmente a 80 % da memória. |
| Redis | O tamanho dos dados, mais as suas estruturas | Durante uma gravação em disco, as páginas modificadas são duplicadas: até ao dobro no pior caso. |
| Elasticsearch, OpenSearch | Pelo menos 2 GB para o heap | O heap não excede metade da memória: o resto serve de cache dos ficheiros. |
Um pico aparece muitas vezes com as aplicações JavaScript: a compilação. npm run build num projeto Next.js, Nuxt ou Angular pede habitualmente 1 a 2 GB só para si, durante alguns minutos, para além do que já está a correr. Compilar no servidor é dimensionar para esse pico; compilar no seu computador ou na sua integração contínua e enviar apenas o resultado é evitá-lo.
O mesmo raciocínio vale para os contentores Docker: cada contentor é um conjunto de processos como os outros, e o daemon do Docker acrescenta o seu próprio consumo. docker stats mostra o que cada um ocupa.
Estes perfis somam os componentes anteriores, com o pico e a margem incluídos. Pressupõem uma aplicação de dimensão corrente e o tráfego de um lançamento; uma base de dados volumosa ou um tráfego intenso fazem subir o valor.
| O que corre 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 uma 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 utilizadores | 4 GB |
| Uma aplicação Next.js compilada no servidor, a sua API e a sua base PostgreSQL | 6 a 8 GB |
| Várias aplicações em contentores, pré-produção e produção | 8 GB |
| Uma base de dados de várias dezenas de GB, consultada intensivamente | 16 GB ou mais |
| Um modelo de linguagem de 7 a 8 mil milhões de parâmetros executado no servidor | 16 GB |
Uma aplicação que chama um modelo de IA por API (OpenAI, Anthropic, Mistral) dimensiona-se como qualquer aplicação web: o modelo corre nos servidores do seu fornecedor, e o seu servidor espera pela resposta. É a execução do modelo no próprio servidor que faz mudar de escala.
Num servidor em produção, a medição substitui a estimativa. Três comandos dizem em que ponto 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 lançar novos programas. A coluna free está quase sempre baixa, e é normal: o Linux preenche a memória não utilizada com a cache dos ficheiros (buff/cache), que devolve assim que um programa precisa dela.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 está a recorrer ao swap: falta-lhe memória.Meça no momento de maior carga do dia, e durante as tarefas pontuais: compilação, cópia de segurança, importação. É o pico que conta.
Um servidor sem memória não abranda progressivamente. Quando já não há nada para libertar, o kernel Linux aciona o OOM killer (out of memory): escolhe um processo, em geral o que ocupa mais memória, e termina-o de imediato. Num servidor aplicacional, é muitas vezes a base de dados.
Os sintomas: erros 502 ou 503 de vez em quando, um serviço que reinicia sem razão aparente, uma compilação que se interrompe com Killed. Os registos confirmam-no:
journalctl -k | grep -i "out of memory"
systemctl status nome-do-servico
Na saída de systemctl status, a menção Failed with result 'oom-kill' identifica um serviço parado por falta de memória.
O swap, quando o servidor o tem, adia esse momento ao passar para o disco a memória menos utilizada. Serve de rede de segurança, não de capacidade: um servidor que se apoia no swap de forma contínua responde várias vezes mais devagar, mesmo num SSD NVMe.
As soluções, da mais simples à mais duradoura: reduzir o número de processos da aplicação (pm.max_children, workers Gunicorn), compilar fora do servidor, limitar a memória da base de dados, e depois passar a um tamanho superior.
A memória não é o único recurso: o processador conta para o que faz cálculo (compilação, tratamento de imagens, execução de um modelo de IA), o disco para a base de dados e os ficheiros. Numa aplicação web, porém, é quase sempre a memória que define o tamanho.
O VPS Pro está disponível em seis tamanhos, com processadores Intel Xeon, memória ECC e SSD NVMe em espelho, e passa ao tamanho superior a qualquer momento, sem reinstalação. A Assistência integral está incluída: descreva-nos o que o seu servidor vai correr, aconselhamos-lhe o tamanho, e depois diagnosticamos e indicamos-lhe o que fazer em cada pergunta, do sistema até ao código da sua aplicação.
Um site estático, um proxy ou um pequeno script correm com 1 a 2 GB. Assim que uma base de dados e uma aplicação (PHP, Node.js, Python) partilham o servidor, conte com 2 GB para um site WordPress e 4 GB para uma aplicação à medida com PostgreSQL.
2 GB para um site com MariaDB e uma 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 uma paragem brusca quando a memória está cheia, mas um servidor que o usa de forma contínua responde várias vezes mais devagar, mesmo num SSD NVMe. É uma rede de segurança; o tamanho escolhe-se pela memória.
Porque o Linux usa a memória não utilizada como cache dos ficheiros. Essa cache liberta-se assim que um programa precisa de memória. A coluna a ler é available, que indica a memória realmente disponível.
Conte com 1 a 2 GB só para a compilação, para além do que já corre no servidor. Compilar no seu computador ou na sua integração contínua, e enviar apenas o resultado, evita esse pico.
Simafri
Vamos falar do seu projeto
Diga-nos em poucas palavras o que precisa: respondemos-lhe rapidamente.
Obrigado! O seu pedido foi enviado. Responderemos em breve.
Prefere o email? Escreva-nos para support@simafri.com.