Objetivos de aprendizaje
Después de leer este artículo podrás:
- Estimar la RAM de un bot según su tamaño y las funciones que usa
- Medir el consumo real de tu proceso y encontrar fugas
- Reducir la caché de discord.js y de discord.py para gastar menos
En esta página
La pregunta sobre la RAM llega pronto: vas a contratar hosting y tienes que elegir un plan. No existe un número único. Un bot que solo responde comandos slash en diez servidores y un bot de moderación en miles de servidores con caché de miembros consumen cantidades muy distintas.
Aun así, se puede estimar y, mejor todavía, medir. A continuación verás qué ocupa memoria en un bot, cómo leer el consumo real de tu proceso y cómo recortar lo que no necesitas.
¿Qué ocupa RAM en un bot de Discord?#
La memoria de un bot se divide en cuatro partes:
- Runtime: Node.js o Python cargado, con tu código y las dependencias. Es el piso, y existe incluso con cero servidores.
- Caché de la librería: servidores, canales, roles, emojis, miembros y mensajes que el Gateway envía y la librería guarda. Es la parte que más crece con el tamaño del bot.
- Librerías extra: procesamiento de imágenes, bases de datos en memoria, clientes de API, audio. Una sola dependencia pesada puede duplicar el consumo.
- Picos: un comando que descarga un archivo grande, genera una imagen o carga una tabla entera de la base de datos usa memoria durante unos segundos.
¿Cuánta RAM suele usar cada tipo de bot?#
Como punto de partida, no como regla:
| Tipo de bot | Rango de partida |
|---|---|
| Comandos slash simples, pocos servidores | 256 a 512 MB |
| Moderación o economía, cientos de servidores | 512 MB a 1 GB |
| Imágenes (canvas, sharp) o IA | 1 GB o más, según la carga |
| Muchos servidores, con sharding | crece por shard, mide |
| Música | el audio pesado suele ir en un servidor aparte (Lavalink), mira qué es Lavalink |
Estos rangos son una referencia práctica para dimensionar, no límites oficiales de ninguna librería. El consumo real depende de tu código, así que la siguiente sección muestra cómo medirlo.
¿Cómo medir la RAM de tu bot?#
Mide el RSS (la memoria física que el proceso ocupa de verdad), no solo el heap. En Node.js, regístralo cada minuto:
setInterval(() => {
const { rss, heapUsed } = process.memoryUsage();
console.log(`rss=${(rss / 1048576).toFixed(0)}MB heap=${(heapUsed / 1048576).toFixed(0)}MB`);
}, 60_000);En Python (Linux), sin dependencias extra:
def uso_mb() -> float:
# VmRSS es el RSS actual, en 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 / 1024Deja el bot corriendo unas horas con tráfico normal y mira la curva. Una línea que sube y se estabiliza es la caché llenándose, y está bien. Una línea que sube sin parar es una fuga.
¿Cómo reducir la caché en discord.js?#
En discord.js v14, Options.cacheWithLimits define cuánto guarda cada caché (mensajes, miembros, reacciones). Por defecto, discord.js limita los mensajes a 200 por canal (Options.DefaultMakeCacheSettings). Si tu bot no lee mensajes antiguos, recorta más:
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);Más importante todavía: pide solo los intents que necesitas. Sin GuildMembers y GuildMessages, el Gateway deja de enviar los eventos de miembros y de mensajes, y queda mucho menos que guardar en caché. Mira el artículo sobre intents privilegiados.
¿Cómo reducir la caché en discord.py?#
En discord.py 2.x, el parámetro max_messages define el tamaño de la caché de mensajes (el valor por defecto es 1000) y member_cache_flags controla qué miembros se guardan:
import os
import discord
intents = discord.Intents.default() # sin members ni message_content
client = discord.Client(
intents=intents,
max_messages=100,
member_cache_flags=discord.MemberCacheFlags.none(),
)
client.run(os.environ["DISCORD_TOKEN"])Pasar max_messages=None desactiva por completo la caché de mensajes. Si activas el intent members, la librería carga los miembros de todos los servidores al iniciar (chunk_guilds_at_startup es True en ese caso), algo que la documentación describe como muy lento en bots con muchos servidores.
¿Qué hacer cuando la RAM solo crece?#
Sigue este orden:
- Confirma que es la caché: reduce los límites y mira si la curva se aplana.
- Busca listeners duplicados: registrar
client.on(...)dentro de un handler de comando crea un listener nuevo en cada uso. Node.js avisa conMaxListenersExceededWarning. - Busca colecciones que solo crecen: un
Mapo una lista global (cooldowns, colas, sesiones) que nunca elimina entradas. - Saca la carga pesada del proceso: las imágenes grandes y las consultas sin
LIMITson picos evitables. - Ajusta el heap, si hace falta: en Node.js,
--max-old-space-size(en MiB) define el techo del heap de V8. La documentación sugiere, en una máquina de 2 GiB, algo como 1536 para dejar margen al sistema. Esto evita desbordes, pero no corrige una fuga.
Un bot que se cae por falta de memoria y se reinicia solo suele tener uno de los problemas de arriba. Si es tu caso, mira también por qué el bot se queda offline.
¿Cuándo necesito shards?#
Discord exige sharding cuando el bot llega a 2.500 servidores, y cada shard admite como máximo 2.500. Antes de eso, basta con un proceso. Después, cada shard tiene su propia caché, así que la RAM total crece con el número de shards. Reducir la caché es lo que más ayuda a mantener el costo bajo control. Para la cuenta en dinero, mira cuánto cuesta hospedar un bot y cómo dimensionar RAM y CPU.
Cómo hacerlo en Square Cloud#
El número que mediste se convierte en la memoria que reservas para el bot. En Square Cloud, la RAM del plan es un pool compartido entre todas tus aplicaciones. El mínimo es 256 MB por aplicación en segundo plano, como un bot, y una aplicación puede usar hasta 32 GB. Defines la RAM de cada aplicación en su configuración o por la API y la cambias cuando quieras. No hay autoscaling: el ajuste lo haces tú.
El Hobby empieza en R$12,49 al mes con 1 GB de RAM, lo que da para varios bots pequeños en el mismo pool. Los contenedores están siempre encendidos. Si el bot supera su límite de RAM, la aplicación se detiene y no vuelve sola, ni siquiera con el reinicio automático: aumenta la memoria e iníciala de nuevo. Las métricas de CPU y RAM aparecen en el panel, con 24 horas de historial, lo que ayuda a validar la curva descrita arriba. El archivo squarecloud.app es opcional: el panel lo genera en el deploy, con la memoria que elijas, o lo escribes tú en la raíz del proyecto.
Mira el hosting de bots de Discord y los planes.
Hosting de bots
Tu bot en línea 24/7, con reinicio automático
Preguntas frecuentes
¿Bastan 256 MB de RAM para un bot de Discord?
Para un bot simple, con comandos slash y pocos servidores, normalmente sí. Los bots con muchos servidores, una caché de miembros grande, imágenes o audio necesitan más. Mide tu proceso antes de decidir.
¿Por qué mi bot gasta cada vez más RAM con el tiempo?
Casi siempre es una caché sin límite (mensajes, miembros) o una fuga en el código, como listeners registrados en cada comando o listas que solo crecen. Limita la caché y sigue el consumo durante varias horas.
¿Con cuántos servidores necesito usar shards?
Discord exige sharding a partir de 2.500 servidores, y cada shard soporta como máximo 2.500. Cada shard adicional mantiene su propia caché, así que la RAM total sube.
¿Node.js o Python gasta menos RAM en un bot?
Depende de lo que haga el bot. Los dos ejecutan bots pequeños con unos pocos cientos de MB. Lo que más pesa es la caché configurada y las librerías extra, como el procesamiento de imágenes.
Más en Bots
Ver los 33 artículos- ¿Cuánto cuesta hospedar un bot de Discord?El costo de hospedar un bot de Discord depende de la RAM, el tiempo en línea, la base de datos y los servicios externos. Aprende a estimar el tuyo.
- Correr un bot en el celular (Termux) o en tu PC vs hospedarloUn bot en tu PC o celular (Termux) se cae cuando el equipo se apaga, se suspende o pierde la red. Compara las tres opciones y cuándo sirve cada una.
- Cómo mantener tu bot de Discord en línea 24/7Para mantener un bot de Discord en línea 24/7, ejecuta el proceso en una máquina siempre encendida con reinicio automático. Compara PC, VPS con pm2 o systemd.
- Por qué tu bot de Discord se apaga o aparece offlineUn bot de Discord aparece offline cuando el proceso se cae, el token es inválido, falta una intent o se acaba la memoria. Diagnostica y corrige cada causa.