Quanta RAM um bot do Discord precisa?

Um bot de Discord pequeno, em poucos servidores e sem música, costuma rodar com 256 a 512 MB de RAM. O consumo cresce com servidores, membros em cache, shards e bibliotecas pesadas.

Atualizado em 5 min de leitura

Objetivos de aprendizado

Depois de ler este artigo, você vai conseguir:

  • Estimar a RAM de um bot pelo tamanho e pelos recursos que ele usa
  • Medir o consumo real do seu processo e achar vazamentos
  • Reduzir o cache do discord.js e do discord.py para gastar menos
Nesta página

A pergunta sobre RAM aparece cedo: você vai contratar hospedagem e precisa escolher um plano. Não existe um número único. Um bot que só responde a comandos slash em dez servidores e um bot de moderação em milhares de servidores com cache de membros têm consumos muito diferentes.

Mesmo assim, dá para estimar e, melhor ainda, medir. A seguir você vê o que ocupa memória num bot, como ler o consumo real do seu processo e como cortar o que não precisa.

RuntimeCache da bibliotecaBibliotecas extrasPicos (temporários)Slash simplespoucos servidoresModeraçãocentenas de servidoresImagens ou IAcanvas, sharpRAM
O runtime é o piso fixo; o que faz a RAM crescer é o cache da biblioteca, as bibliotecas pesadas e os picos de comandos.

O que ocupa RAM em um bot do Discord?#

A memória de um bot se divide em quatro partes:

  1. Runtime: o Node.js ou o Python carregado, com o código e as dependências. É o piso, e existe mesmo com zero servidores.
  2. Cache da biblioteca: servidores, canais, cargos, emojis, membros e mensagens que o Gateway envia e a biblioteca guarda. É a parte que mais cresce com o tamanho do bot.
  3. Bibliotecas extras: processamento de imagem, banco de dados em memória, clientes de API, áudio. Uma única dependência pesada pode dobrar o consumo.
  4. Picos: um comando que baixa um arquivo grande, monta uma imagem ou carrega uma lista inteira do banco usa memória por alguns segundos.

Quanta RAM cada tipo de bot costuma usar?#

Como ponto de partida, e não como regra:

Tipo de bot Faixa de partida
Comandos slash simples, poucos servidores 256 a 512 MB
Moderação ou economia, centenas de servidores 512 MB a 1 GB
Imagens (canvas, sharp) ou IA 1 GB ou mais, conforme a carga
Muitos servidores, com sharding cresce por shard, meça
Música o áudio pesado costuma ficar em um servidor separado (Lavalink), veja o que é Lavalink

Essas faixas são uma referência prática para dimensionar, não limites oficiais de nenhuma biblioteca. O consumo real depende do seu código, então a próxima seção mostra como medir.

Como medir a RAM do seu bot?#

Meça o RSS (a memória física que o processo ocupa de fato), não só o heap. No Node.js, registre a cada minuto:

js
setInterval(() => {
  const { rss, heapUsed } = process.memoryUsage();
  console.log(`rss=${(rss / 1048576).toFixed(0)}MB heap=${(heapUsed / 1048576).toFixed(0)}MB`);
}, 60_000);

No Python (Linux), sem dependências extras:

python
def uso_mb() -> float:
    # VmRSS é o RSS atual, em kB (Linux)
    with open("/proc/self/status") as f:
        kb = next(int(l.split()[1]) for l in f if l.startswith("VmRSS:"))
    return kb / 1024

Deixe o bot rodando por algumas horas com tráfego normal e olhe a curva. Uma linha que sobe e estabiliza é o cache enchendo, e está tudo bem. Uma linha que sobe sem parar é vazamento.

Como reduzir o cache no discord.js?#

No discord.js v14, Options.cacheWithLimits define quanto cada cache (mensagens, membros, reações) guarda. Por padrão, o discord.js limita as mensagens a 200 por canal (Options.DefaultMakeCacheSettings). Se o seu bot não lê mensagens antigas, corte mais:

js
const { Client, GatewayIntentBits, Options } = require('discord.js');

const client = new Client({
  intents: [GatewayIntentBits.Guilds],
  makeCache: Options.cacheWithLimits({
    ...Options.DefaultMakeCacheSettings,
    MessageManager: 0,
    ReactionManager: 0,
    GuildMemberManager: {
      maxSize: 50,
      keepOverLimit: (member) => member.id === client.user.id,
    },
  }),
});

client.login(process.env.DISCORD_TOKEN);

Mais importante ainda: peça só os intents de que precisa. Sem GuildMembers e GuildMessages, o Gateway deixa de enviar os eventos de membros e de mensagens, e sobra bem menos para cachear. Veja o artigo sobre intents privilegiados.

Como reduzir o cache no discord.py?#

No discord.py 2.x, o parâmetro max_messages define o tamanho do cache de mensagens (o padrão é 1000) e member_cache_flags controla quais membros ficam guardados:

python
import os
import discord

intents = discord.Intents.default()  # sem members nem message_content

client = discord.Client(
    intents=intents,
    max_messages=100,
    member_cache_flags=discord.MemberCacheFlags.none(),
)

client.run(os.environ["DISCORD_TOKEN"])

Passar max_messages=None desliga o cache de mensagens por completo. Se você ativar o intent members, a biblioteca passa a carregar os membros de todos os servidores ao iniciar (chunk_guilds_at_startup é True nesse caso), o que a documentação descreve como muito lento em bots com muitos servidores.

O que fazer quando a RAM só cresce?#

Siga esta ordem:

  1. Confirme que é cache: reduza os limites e veja se a curva achata.
  2. Procure listeners duplicados: registrar client.on(...) dentro de um handler de comando cria um novo listener a cada uso. O Node.js avisa com MaxListenersExceededWarning.
  3. Procure coleções que só crescem: um Map ou lista global (cooldowns, filas, sessões) que nunca remove entradas.
  4. Tire a carga pesada do processo: imagens grandes e consultas sem LIMIT são picos evitáveis.
  5. Ajuste o heap, se precisar: no Node.js, --max-old-space-size (em MiB) define o teto do heap do V8. A documentação sugere, numa máquina de 2 GiB, algo como 1536 para deixar folga ao sistema. Isso evita estouro, mas não corrige vazamento.

Um bot que cai por falta de memória e reinicia sozinho costuma ter um dos problemas acima. Se for o seu caso, veja também por que o bot fica offline.

Quando preciso de shards?#

O Discord exige sharding quando o bot chega a 2.500 servidores, e cada shard comporta no máximo 2.500. Antes disso, basta um processo. Depois, cada shard tem o próprio cache, então a RAM total cresce com o número de shards. Reduzir o cache é o que mais ajuda a manter o custo sob controle. Para a conta de dinheiro, veja quanto custa hospedar um bot e como dimensionar RAM e CPU.

Como fazer isso na Square Cloud#

O número que você mediu vira a memória que você reserva para o bot. Na Square Cloud, a RAM do plano é um pool compartilhado entre todas as suas aplicações. O mínimo é 256 MB por aplicação de fundo, como um bot, e uma aplicação pode usar até 32 GB. Você define a RAM de cada aplicação nas configurações ou pela API e muda quando quiser. Não há autoscaling: o ajuste é seu.

O Hobby começa em R$ 12,49 por mês com 1 GB de RAM, o que comporta vários bots pequenos no mesmo pool. Os containers ficam sempre ligados. Se o bot passar do limite de RAM, a aplicação para e não volta sozinha, nem com o reinício automático: aumente a memória e inicie de novo. As métricas de CPU e RAM aparecem no painel, com 24 horas de histórico, o que ajuda a validar a curva descrita acima. O arquivo squarecloud.app é opcional: o painel gera no deploy, com a memória que você escolher, ou você o escreve na raiz do projeto.

Veja a hospedagem de bots de Discord na Square Cloud e os planos.

Hospedagem de bots

Seu bot online 24/7, com reinício automático

Saiba mais

Perguntas frequentes

256 MB de RAM bastam para um bot do Discord?

Para um bot simples, com comandos slash e poucos servidores, geralmente sim. Bots com muitos servidores, cache de membros grande, imagens ou áudio precisam de mais. Meça o seu processo antes de decidir.

Por que meu bot gasta cada vez mais RAM com o tempo?

Quase sempre é cache sem limite (mensagens, membros) ou um vazamento no código, como listeners registrados a cada comando ou listas que só crescem. Limite o cache e acompanhe o consumo ao longo de horas.

Com quantos servidores preciso usar shards?

O Discord exige sharding a partir de 2.500 servidores, e cada shard aguenta no máximo 2.500. Cada shard adicional mantém seu próprio cache, então a RAM total sobe.

Node.js ou Python gasta menos RAM em um bot?

Depende do que o bot faz. Os dois rodam bots pequenos em poucas centenas de MB. O que pesa mais é o cache configurado e as bibliotecas extras, como processamento de imagem.

Próximo artigoErro 429 no Discord: rate limit e ban temporário do CloudflareO erro 429 do Discord significa rate limit: seu bot mandou requisições demais. Veja as causas, como ler os headers, corrigir e evitar o ban temporário.