Calculadora interactiva de memoria y rendimiento para colas RabbitMQ con análisis y visualización en tiempo real en el cliente.
Calculadora interactiva de memoria y rendimiento para colas RabbitMQ con análisis y visualización en tiempo real ejecutados en el cliente.
Especifica el motor de consenso de la máquina virtual Erlang BEAM y el subsistema de almacenamiento. Las colas Quorum implementan el consenso Raft, lo que requiere aproximadamente entre un 30% y un 40% más de RAM por cada entrada activa en la máquina de estados (~384 B frente a ~32 B en CQv2). Classic Queue v2 segmenta los mensajes en bloques inmutables en disco de 32 MB, reduciendo la memoria de índices paginados en un 77% en comparación con las tablas ETS del heap de Erlang en Classic Queue v1.
Longitud en bytes del cuerpo del mensaje AMQP 0-9-1 sin comprimir. Las cargas útiles (payloads) <= 64 bytes se asignan directamente en el heap local del proceso Erlang y están sujetas al recolector de basura por copia. Las cargas útiles > 64 bytes utilizan el asignador global de binarios con recuento de referencias de Erlang (refc binaries), lo que permite compartir memoria sin copias (zero-copy) entre múltiples suscriptores mediante intercambiadores fanout de AMQP.
Límite de prefetch configurado mediante basic.qos en AMQP por canal de consumidor. Los mensajes enviados bajo prefetch quedan anclados en la memoria RAM no paginable de Erlang hasta que se confirman (ack). Configurar el prefetch en 0 (ilimitado) provoca una saturación crítica de RAM ante picos imprevistos en la cola (backlog). El intervalo de referencia óptimo para mantener un rendimiento de red sostenido sin saturar la memoria es de 50 a 200.
Número total de canales de procesamiento concurrentes con etiquetas basic.consume activas. Se multiplica directamente por conteoPrefetchQosConsumidor y bytesCargaUtilPromedioMensaje para calcular la asignación total de memoria en tránsito no paginable: M_inflight = Consumidores * Prefetch * (BytesCargaUtil + 120 B de metadatos de trama BEAM).
Tasa sostenida de rendimiento de entrada (throughput de publicación). Se evalúa frente a vm_memory_high_watermark (0,40 de la RAM del host por defecto) y disk_free_limit. Cuando la tasa de entrada supera la tasa de confirmación de los consumidores, la velocidad neta del backlog determina el tiempo hasta superar el límite de alerta: t_breach = (M_watermark - M_actual) / (R_backlog * SobrecargaPorMsg).
Los mensajes AMQP de más de 64 bytes se alojan en el heap binario global con recuento de referencias de Erlang (refc binaries). Si un consumidor o complemento (plugin) del broker extrae un pequeño fragmento de encabezado de una carga útil de 1 MB, el entorno de ejecución Erlang BEAM retiene la asignación completa de 1 MB en la RAM física hasta que ese sub-binario diminuto sea recolectado por el GC. En flujos de enrutamiento de alto rendimiento, fuerce una copia explícita del binario o la recodificación de la cadena para liberar la referencia refc subyacente y erradicar el crecimiento fantasma de memoria.
Las colas Quorum sincronizan en disco el registro de escritura previa (WAL) de Raft mediante operaciones fsync(). En almacenamientos en bloque en la nube con latencia de escritura variable (por ejemplo, al agotarse las ráfagas en AWS EBS gp2), la limitación de IOPS puede restringir el rendimiento de la cola a solo 200 msg/s, independientemente de los núcleos de CPU disponibles. Ajuste raft.wal_max_batch_size a 4096 y ubique /var/lib/rabbitmq en discos SSD NVMe de alto rendimiento que proporcionen >= 10 000 IOPS sostenidas de escritura para superar los 30 000 msg/s por cola Quorum.
Cada conexión TCP activa consume memoria de sockets en el kernel (rmem/wmem asigna entre 64 KB y 256 KB) sumada a la sobrecarga del proceso lector de Erlang (~40 KB). Multiplexar cientos de canales activos sobre una única conexión provoca bloqueo de cabeza de línea (head-of-line blocking) en los lectores de sockets monohilo de Erlang. Mantenga un grupo balanceado (pool) de 10 a 50 canales activos por conexión TCP para aprovechar al máximo los planificadores multinúcleo de BEAM sin agotar los descriptores de archivo del sistema.
Todas las proyecciones de dimensionamiento de colas y vaciado de backlog se ejecutan íntegramente en el cliente mediante ecuaciones algebraicas deterministas en forma cerrada O(1) y Web Workers en memoria. Las métricas de topología del clúster, las estadísticas de profundidad de cola y los parámetros de tamaño de carga útil nunca salen del entorno aislado (sandbox) de su navegador ni se transmiten a terminales de red externos, garantizando una confidencialidad rigurosa para auditorías de infraestructura empresarial.
Ejecute 'rabbitmq-diagnostics memory_breakdown' para comprobar si se ha activado vm_memory_high_watermark (0,40 por defecto). RabbitMQ aplica contrapresión (backpressure) deteniendo la lectura en los sockets TCP de los publicadores, lo que satura el búfer de socket del cliente y bloquea el hilo emisor sin generar excepciones del protocolo AMQP. No aumente el límite de alarma por encima de 0,50. En su lugar, reduzca el prefetch de basic.qos de los consumidores a <= 100 para liberar mensajes no confirmados, escale horizontalmente los consumidores o vacíe las colas de mensajes no entregados (dead-letter queues) inactivas.
Identifique fugas de mensajes sin confirmar y el agotamiento de la tabla de átomos. Ejecute 'rabbitmqctl list_queues name messages_unacknowledged consumers'. Si messages_unacknowledged presenta un valor elevado, los consumidores están omitiendo los acuses de recibo (acks), reteniendo los mensajes permanentemente en RAM. Asimismo, inspeccione los encabezados de enrutamiento personalizados de AMQP para asegurarse de que los publicadores no generen cadenas dinámicas únicas que se conviertan en átomos de Erlang, ya que la tabla de átomos de BEAM tiene un límite estricto de 1 048 576 entradas y provoca el colapso inmediato del broker si se satura.
Verifique el parámetro de caché de ventana deslizante de la cola Quorum 'quorum_commands_soft_limit' (por defecto 32 768 mensajes). Las colas Quorum retienen los mensajes confirmados recientemente en una caché en memoria para entregarlos a los consumidores con mínima latencia. Ante acumulaciones profundas provocadas por publicadores veloces y consumidores lentos, configure 'quorum_commands_soft_limit = 1000' y aplique una política 'x-max-in-memory-length' para forzar una expulsión agresiva de la memoria hacia el disco sin comprometer la durabilidad de Raft.
La memoria total por cola se calcula mediante la fórmula: M_total = M_payload + M_metadata + M_inflight + M_socket, donde M_payload corresponde al cuerpo de los mensajes residentes en RAM, M_metadata representa la sobrecarga de índices de procesos en BEAM (~32 B para Classic Queue v2, ~140 B para Classic Queue v1 y ~384 B para colas Quorum), M_inflight = Consumidores * Prefetch de basic.qos * (CargaÚtil + Metadatos), y M_socket reserva entre 64 KB y 256 KB por conexión TCP. Por ejemplo, 50 consumidores con un prefetch de 100 que procesan mensajes de 4 KB retienen por sí solos 50 * 100 * 4,12 KB = 20,6 MB en RAM en tránsito no paginable.
El umbral recomendado en producción para vm_memory_high_watermark se sitúa entre 0,40 y 0,45 (del 40% al 45% de la RAM total del sistema), reservando el 55% a 60% restante para la caché de páginas del sistema operativo, los búferes de sockets y las pasadas de compactación del recolector de basura de Erlang BEAM. Establecer este límite por encima de 0,55 genera un riesgo crítico de activación del OOM Killer (Out-Of-Memory) de Linux, ya que el recolector de basura por copia de Erlang puede duplicar momentáneamente el tamaño del heap residente de un proceso durante la compactación antes de que las alarmas de memoria consigan estrangular las publicaciones entrantes.
Para mensajes activos en memoria, las colas Quorum requieren aproximadamente entre un 30% y un 40% más de memoria por mensaje que Classic Queue v2 debido al seguimiento del consenso Raft (metadatos de término, índice y comandos: ~384 B frente a ~32 B por mensaje). No obstante, las colas Quorum almacenan los segmentos del registro directamente en disco y gestionan una ventana de caché con desalojo, eliminando por completo la severa fragmentación del heap de Erlang y los bloqueos por sincronización en todo el clúster que degradan a las colas clásicas reflejadas heredadas (HA sync).
Cuando el uso total de memoria de Erlang sobrepasa vm_memory_high_watermark, RabbitMQ activa de inmediato una alarma de memoria en todo el clúster, deja de leer de los sockets TCP de los productores y suspende el procesamiento de basic.publish. Los productores se bloquean en sus búferes locales de escritura TCP sin recibir ningún error de AMQP, mientras que los consumidores continúan procesando sin impedimentos. En cuanto la memoria residente desciende por debajo del umbral gracias al consumo de mensajes y a la recolección de basura de BEAM, RabbitMQ desactiva la alarma y reanuda automáticamente el sondeo de los sockets de los publicadores.
El parámetro de prefetch de basic.qos define cuántos mensajes sin confirmar envía RabbitMQ a un consumidor antes de esperar un basic.ack. Los mensajes despachados quedan anclados en la memoria del proceso Erlang y no pueden paginarse a disco, sin importar el nivel de presión de memoria. Si 50 consumidores tienen configurado un prefetch de 1000 procesando mensajes de 10 KB, esto reserva 50 * 1000 * 10 KB = 500 MB de RAM en tránsito completamente no paginable. Limitar el prefetch a un rango de 50 a 100 mantiene la saturación de la red a velocidad de línea y conserva la RAM en tránsito por debajo de 50 MB.
El tiempo de drenaje del backlog se calcula con la fórmula: Tiempo de drenaje (segundos) = Mensajes acumulados en el backlog / (Tasa total de procesamiento de consumidores msg/s - Tasa de publicación entrante msg/s). Si 20 consumidores confirman 150 msg/s cada uno (3000 msg/s en conjunto) frente a una tasa de publicación de 1000 msg/s, la velocidad neta de drenaje es de 2000 msg/s. Un backlog de 500 000 mensajes se vaciará en 500 000 / 2000 = 250 segundos (4 minutos y 10 segundos). Si la tasa de consumo es igual o inferior a la tasa de publicación, el tiempo de vaciado es infinito, lo que indica una cola en continuo crecimiento.
Classic Queue v1 (CQv1) almacena los índices de la cola dentro de estructuras de diccionario del proceso Erlang, reteniendo entre 120 B y 140 B en RAM por mensaje incluso después de que los cuerpos de los mensajes se hayan paginado a disco. Por el contrario, Classic Queue v2 (CQv2) almacena tanto los mensajes como los índices en archivos de segmento inmutables de 32 MB en disco, lo que reduce la sobrecarga en memoria para mensajes paginados en más de un 75%, situándola en torno a los 32 B por mensaje. En una acumulación de 10 millones de mensajes, CQv1 demanda ~1,4 GB de memoria residente en el heap de Erlang solo para índices, mientras que CQv2 únicamente requiere ~320 MB.
Calcula la memoria para PostgreSQL y genera parámetros de postgresql.conf con PGTune. Optimiza shared_buffers, work_mem, effective_cache_size y max_connections.
Calcula la capacidad de almacenamiento útil en TB decimales y TiB binarios para configuraciones RAID 0, 1, 5, 6, 10, 50, 60 y ZFS RAIDZ1/Z2/Z3, con sobrecarga de paridad, riesgo de fallo por URE en reconstrucción, tiempo estimado y visualizador de bahías.
Calcula el tamaño exacto de muestra para tests A/B, la potencia estadística y la duración de la prueba. Incluye resolución inversa de MDE, métricas continuas, corrección de Bonferroni y SRM.
Convierte PX a REM y REM a PX al instante con tamaño base personalizable. Genera tipografía fluida con clamp() en CSS, clases de Tailwind y tablas de conversión.
Comprueba códigos de estado HTTP, analiza cadenas de redirección e inspecciona cabeceras de respuesta. Diagnostica errores de 1xx a 5xx, normas RFC, impacto en SEO y soluciones.
Prueba, depura y optimiza expresiones regulares en tiempo real. Inspecciona coincidencias de patrones, grupos de captura, desglose de tokens y sintaxis de sustitución.