Quanta RAM e CPU minha aplicação precisa?

Meça o pico de memória da aplicação rodando com carga real e some uma folga de cerca de 30%. A CPU raramente é o limite para bots e APIs pequenas.

Atualizado em 5 min de leitura

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
Nesta página

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.

RAMtempoLimitecontratadoPico + 30%Picomedido
Meça o pico real, some cerca de 30% de folga e contrate o próximo tamanho acima dessa linha.

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:

js
// 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:

python
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:

  1. O número de usuários ou servidores dobrar.
  2. Você adicionar uma biblioteca grande ou um cache em memória.
  3. 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

Saiba mais

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.

Próximo artigoDeploy automático com GitHub ActionsDeploy automático com GitHub Actions envia seu código para o servidor a cada push. Veja o workflow passo a passo, secrets, testes antes do deploy e erros comuns.