Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Medir o consumo real de RAM e CPU da sua aplicação
- Calcular a RAM a contratar com folga para picos
- Reconhecer sinais de falta de RAM ou de CPU e agir
Não existe um número universal de RAM para uma aplicação. Um bot que só responde comandos, uma API com cache em memória e um site com renderização no servidor consomem quantidades muito diferentes, e a mesma aplicação muda de consumo quando ganha usuários. Por isso o dimensionamento correto começa pela medição, não por um palpite ou por uma tabela da internet.
Contratar menos do que precisa derruba a aplicação. Contratar muito mais é pagar todo mês por memória parada.
Qual a diferença entre RAM e CPU no dimensionamento?#
RAM é um limite rígido. Quando a aplicação tenta usar mais memória do que o limite do container, o sistema encerra o processo. Não há lentidão gradual: ela funciona e, de repente, o processo morre.
CPU é um limite flexível. Com pouca CPU, a aplicação fica mais lenta, as respostas demoram e as filas crescem, mas ela continua de pé. Por isso a RAM costuma ser o primeiro recurso a dimensionar, e a CPU entra como segundo passo, para verificar se algo está saturado.
Como medir a RAM que a aplicação usa de verdade?#
Meça o pico com a aplicação rodando em condições parecidas com as de produção: mesmo número de servidores no bot, mesmos dados, mesmo tráfego. O consumo logo depois de iniciar engana, porque caches e conexões ainda não encheram.
Em Node.js, process.memoryUsage() devolve valores em bytes. O campo rss é a memória total do processo, que é o que importa para o limite do container:
// medir.js: imprime o consumo a cada 10 segundos
const mb = (n) => (n / 1024 / 1024).toFixed(0);
setInterval(() => {
const m = process.memoryUsage();
console.log(`rss=${mb(m.rss)} MB heapUsed=${mb(m.heapUsed)} MB`);
}, 10_000);Em Python, o módulo resource informa o pico de memória do processo. No Linux, ru_maxrss vem em KiB:
import resource
def pico_mb() -> float:
# Linux: ru_maxrss em KiB (no macOS vem em bytes)
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024
print(f"pico de memoria: {pico_mb():.0f} MB")Em Java, a JVM usa memória além do heap (metaspace, threads, buffers), então o limite do container precisa cobrir o processo todo, não só o -Xmx. No Linux, a JVM detecta o limite do container por padrão.
Deixe a medição rodando por horas ou dias e anote o maior valor de rss. Esse é o seu pico.
Quanto de folga somar ao pico?#
Uma regra prática simples: pico medido multiplicado por 1,3, arredondado para o próximo tamanho disponível.
| Pico medido | Com 30% de folga | Contratar |
|---|---|---|
| 140 MB | 182 MB | 256 MB |
| 310 MB | 403 MB | 512 MB |
| 700 MB | 910 MB | 1 GB |
A folga cobre picos raros, como um lote grande de dados, uma reconexão em massa ou a coleta de lixo atrasada. Se o consumo oscila muito entre medições, aumente a folga para 50%.
Como saber se a RAM está faltando?#
Os sinais mais comuns:
- A aplicação para ou reinicia sozinha, sem stack trace de erro de código.
- O log termina de repente, sem mensagem de encerramento.
- O gráfico de memória sobe em escada e nunca desce.
- Em Node.js, aparece
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory.
Os dois últimos casos costumam apontar para vazamento: um cache sem limite, um array global que só cresce, listeners que nunca são removidos. Aumentar a RAM só adia a queda. Primeiro corrija, depois dimensione. Veja como ler os logs da aplicação para achar o momento exato da queda.
No Node.js, você ajusta o limite do heap do V8 com --max-old-space-size=SIZE, em MiB (documentado na CLI do Node.js). Se você contratou mais memória e o heap continua estourando, esse parâmetro é o suspeito.
Como saber se a CPU está faltando?#
CPU saturada aparece como lentidão, não como queda: comandos do bot que demoram segundos, requisições que passam do tempo limite, latência que sobe junto com o tráfego. Compare o uso de CPU com o tempo de resposta. Se os dois sobem juntos e a CPU fica perto do teto, falta CPU.
Antes de pagar por mais, entenda o tipo de carga:
- Node.js roda seu JavaScript em uma thread. Mais núcleos só ajudam com workers ou vários processos.
- Python com threads comuns também não paraleliza código puro de CPU por causa do GIL (no build padrão do CPython; o build opcional free-threaded do 3.13+ remove o GIL). Use processos ou bibliotecas nativas.
- Tarefas pesadas (imagem, vídeo, IA, criptografia) consomem CPU de verdade e justificam mais recursos.
Para um bot que responde comandos ou uma API que lê e grava no banco, o gargalo quase sempre é a rede ou o banco de dados, não a CPU. Para transformar esses números em orçamento, veja quanto custa hospedar um site.
O que muda quando a aplicação cresce?#
O consumo cresce com o número de usuários, de servidores ou de itens em cache. Reavalie o dimensionamento quando:
- O número de usuários ou servidores dobrar.
- Você adicionar uma biblioteca grande ou um cache em memória.
- Surgirem reinícios que antes não existiam.
Se um processo só não dá conta, a escala horizontal divide a carga entre várias instâncias atrás de um mesmo domínio. Cada instância continua precisando da sua própria RAM, então o custo total é a soma delas. Para bots do Discord, há uma referência específica em quanta RAM um bot do Discord precisa.
Como fazer isso na Square Cloud#
Na Square Cloud, o número que você mediu vira a RAM da aplicação, escolhida no deploy e alterada depois nas configurações ou pela API. O painel mostra métricas de CPU, RAM e rede com 24 horas de histórico, então dá para medir o pico em produção e conferir se a folga de 30% se sustenta. Se sobrou memória, reduza; se faltou, aumente. Não há autoscaling: o ajuste é uma decisão sua, com base nessas métricas.
A RAM do plano é um pool compartilhado entre as suas aplicações, com mínimo de 256 MB por aplicação de fundo, como um bot, e 512 MB por aplicação web. No Hobby de 1 GB, por exemplo, cabem lado a lado um bot de 256 MB e uma API de 512 MB. O vCPU do plano é o teto de cada ambiente, calculado a partir da RAM alocada, e não se soma entre aplicações. Os planos Hobby começam em R$ 12,49 por mês.
Se a aplicação estourar a memória, ela para e não volta sozinha: aumente a RAM e inicie de novo. O reinício automático, ligado por padrão no deploy pelo painel, só religa o processo que encerra com erro.
Compare os planos em preços e veja o que dá para ajustar em cada aplicação em recursos.
Deploy
Envie pelo GitHub, pela CLI ou em ZIP e publique em segundos
Perguntas frequentes
Quanta RAM um bot ou uma API pequena precisa?
Depende do código e das bibliotecas, então o número certo vem da medição. Meça o pico com tráfego real, some 30% de folga e arredonde para cima.
O que acontece quando a aplicação fica sem RAM?
Em Linux com containers, o processo que passa do limite de memória é encerrado pelo kernel (OOM kill) e o log costuma mostrar apenas que o processo morreu. O sinal é o processo morrer sem erro de código no log; se a plataforma o religa sozinha, aparecem reinícios em sequência.
Mais CPU deixa a aplicação mais rápida?
Só se a CPU for o gargalo. Node.js executa seu JavaScript em uma única thread, então mais núcleos não aceleram um único processo sem workers ou múltiplos processos.
Vale contratar mais RAM só por garantia?
Folga de 30% a 50% sobre o pico é razoável. Muito além disso você paga por memória parada. Se a RAM cresce sem parar, o problema é vazamento, não falta de plano.
Mais em Deploy
Ver todos os 33 artigos- O que são variáveis de ambiente (e por que usar)Variáveis de ambiente são pares chave-valor que o sistema entrega ao processo. Veja como ler no Node.js e Python e por que tokens não ficam no código.
- O que é deploy (e o que acontece quando você faz um)Deploy é o processo de levar o código de uma aplicação para um servidor, prepará-lo e colocá-lo no ar. Veja as etapas, os métodos e como voltar atrás.
- Quanto custa hospedar uma aplicação Node.jsHospedar Node.js custa de zero, com limites, a poucas dezenas de reais por mês. Veja o que define o preço, quanta RAM o app usa e como cada opção cobra.
- Melhor forma de hospedar uma aplicação Node.jsA melhor forma de hospedar Node.js depende do tipo de processo: sempre ligado ou por requisição. Compare VPS, plataforma de containers e serverless por cenário.