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
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.
O que ocupa RAM em um bot do Discord?#
A memória de um bot se divide em quatro partes:
- Runtime: o Node.js ou o Python carregado, com o código e as dependências. É o piso, e existe mesmo com zero servidores.
- 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.
- Bibliotecas extras: processamento de imagem, banco de dados em memória, clientes de API, áudio. Uma única dependência pesada pode dobrar o consumo.
- 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:
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:
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 / 1024Deixe 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:
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:
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:
- Confirme que é cache: reduza os limites e veja se a curva achata.
- Procure listeners duplicados: registrar
client.on(...)dentro de um handler de comando cria um novo listener a cada uso. O Node.js avisa comMaxListenersExceededWarning. - Procure coleções que só crescem: um
Mapou lista global (cooldowns, filas, sessões) que nunca remove entradas. - Tire a carga pesada do processo: imagens grandes e consultas sem
LIMITsão picos evitáveis. - 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
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.
Mais em Bots
Ver todos os 33 artigos- Quanto custa hospedar um bot do Discord?O custo de hospedar um bot do Discord depende de RAM, tempo online, banco de dados e serviços externos. Veja como estimar o seu e onde o gasto aparece.
- Rodar bot no celular (Termux) ou no PC vs hospedar: o que mudaUm bot no PC ou no celular (Termux) fica offline quando o aparelho desliga, dorme ou perde a rede. Compare as três opções e veja quando cada uma serve.
- Como deixar um bot do Discord online 24/7Para deixar um bot do Discord online 24/7, rode o processo numa máquina sempre ligada com reinício automático. Veja PC, VPS com pm2 ou systemd e hospedagem.
- Por que meu bot do Discord fica offline (e como resolver)Bot do Discord offline quase sempre é processo caído, token inválido, intent não habilitada ou falta de memória. Veja como diagnosticar cada causa e corrigir.