Calculateur interactif de mémoire et débit RabbitMQ avec modélisation et analyse en temps réel côté client.
Calculateur interactif de dimensionnement mémoire et débit pour files RabbitMQ avec modélisation et visualisation en temps réel côté client.
Définit le moteur de consensus Erlang BEAM et le sous-système de stockage sous-jacent. Les files Quorum implémentent le consensus Raft, nécessitant environ 30 à 40 % de RAM supplémentaire par entrée de machine d'état en transit (~384 o contre ~32 o pour CQv2). Classic Queue v2 segmente les messages en blocs de disque immuables de 32 Mo, réduisant la mémoire d'index paginée de 77 % par rapport aux tables ETS sur le tas Erlang de Classic Queue v1.
Taille en octets du corps de message AMQP 0-9-1 non compressé. Les charges utiles inférieures ou égales à 64 octets sont allouées directement sur le tas local du processus Erlang et soumises au ramasse-miettes par copie (copying GC). Les charges utiles supérieures à 64 octets exploitent l'allocateur binaire global à comptage de références d'Erlang (binaires refc), permettant un partage mémoire zéro-copie multi-abonnés sur les échanges AMQP fanout.
Limite de préchargement AMQP basic.qos configurée par canal de consommateur. Les messages distribués sous préchargement sont verrouillés en RAM Erlang non paginable jusqu'à leur acquittement (ACK). Définir le prefetch à 0 (illimité) entraîne un gonflement critique de la RAM en cas d'engorgement. La plage de référence optimale pour maintenir un débit réseau soutenu sans saturer la mémoire se situe entre 50 et 200.
Nombre total de canaux de traitement concurrents détenant des étiquettes basic.consume actives. Ce facteur est multiplié directement par limitePrefetchQosConsommateur et tailleMoyenneChargeUtileOctets pour évaluer l'empreinte mémoire non paginable en transit : M_inflight = Consommateurs * Prefetch * (OctetsChargeUtile + 120 o de métadonnées de trame BEAM).
Débit d'ingestion soutenu en entrée. Évalué par rapport au seuil critique vm_memory_high_watermark (par défaut à 0,40 de la RAM hôte) et à disk_free_limit. Lorsque le taux d'ingestion dépasse le taux d'acquittement des consommateurs, la vélocité nette d'accumulation régit le délai avant dépassement du seuil d'alarme : t_depassement = (M_seuil - M_actuelle) / (R_accumulation * SurchargeParMsg).
Les messages AMQP supérieurs à 64 octets résident sur le tas binaire global à comptage de références d'Erlang (refc binaries). Si un consommateur ou un plugin du courtier extrait une fraction d'en-tête de quelques octets d'une charge utile de 1 Mo, l'environnement d'exécution Erlang BEAM maintient l'intégralité du bloc de 1 Mo en mémoire physique tant que ce sous-binaire n'a pas été collecté par le GC. Dans les pipelines de routage à haut débit, forcez une copie binaire explicite ou un réencodage de chaîne pour libérer la référence refc sous-jacente et éliminer la rétention fantôme de RAM.
Les files Quorum synchronisent leur journal de transactions préalables (WAL Raft) sur disque via des appels fsync(). Sur du stockage bloc cloud aux latences d'écriture variables (ex. épuisement des crédits burst AWS EBS gp2), la limitation des IOPS peut brider le débit à 200 msg/s, quel que soit le nombre de cœurs CPU disponibles. Réglez raft.wal_max_batch_size à 4096 et montez /var/lib/rabbitmq sur des SSD NVMe haute performance garantissant au moins 10 000 IOPS en écriture soutenue pour dépasser 30 000 msg/s par file Quorum.
Chaque connexion TCP active consomme de la mémoire tampon de socket noyau (rmem/wmem allouant 64 Ko à 256 Ko) ainsi que la mémoire du processus de lecture Erlang (~40 Ko). Multiplexer des centaines de canaux actifs sur une seule connexion TCP crée un blocage en tête de ligne (head-of-line blocking) sur le lecteur de socket mono-threadé d'Erlang. Maintenez un pool équilibré de 10 à 50 canaux actifs par connexion TCP afin de saturer efficacement les ordonnanceurs multicœurs de la BEAM sans épuiser les descripteurs de fichiers.
Toutes les projections de dimensionnement et de vidage de backlog s'exécutent intégralement côté client via des équations algébriques déterministes closes en O(1) et des Web Workers en mémoire locale. Aucune métrique de topologie de cluster, profondeur de file ou paramètre de charge utile ne quitte le bac à sable de votre navigateur ni n'est transmise à des serveurs distants, garantissant une confidentialité absolue pour vos audits d'infrastructure d'entreprise.
Exécutez 'rabbitmq-diagnostics memory_breakdown' pour vérifier si le seuil vm_memory_high_watermark (0,40 par défaut) a été franchi. RabbitMQ applique une contre-pression (backpressure) en cessant la lecture sur les sockets TCP des producteurs, ce qui sature le tampon du socket client et fige le thread d'émission sans lever d'exception de protocole AMQP. N'augmentez pas le watermark au-delà de 0,50. Réduisez plutôt le prefetch basic.qos des consommateurs à <= 100 pour libérer les messages non acquittés, effectuez un dimensionnement horizontal des consommateurs ou purgez les files de rebut (dead-letter queues) inactives.
Diagnostiquez une rétention de messages non acquittés ou une saturation de la table des atomes Erlang. Exécutez 'rabbitmqctl list_queues name messages_unacknowledged consumers'. Si messages_unacknowledged est anormalement élevé, des consommateurs omettent d'envoyer leurs acquittements, verrouillant définitivement ces messages en RAM. Vérifiez également vos en-têtes de routage AMQP personnalisés pour vous assurer que les producteurs ne génèrent pas dynamiquement des chaînes uniques converties en atomes Erlang : la table des atomes de la BEAM est plafonnée à 1 048 576 entrées et son dépassement entraîne l'arrêt brutal et immédiat du courtier.
Inspectez le paramètre de cache à fenêtre glissante 'quorum_commands_soft_limit' (fixé par défaut à 32 768 messages). Les files Quorum conservent les messages récemment validés en mémoire pour accélérer la distribution aux consommateurs. En présence d'un fort arriéré combiné à des producteurs rapides et des consommateurs lents, configurez 'quorum_commands_soft_limit = 1000' et appliquez une politique 'x-max-in-memory-length' pour imposer une éviction agressive vers le disque sans compromettre la durabilité Raft.
La mémoire totale d'une file se calcule selon la formule : M_total = M_payload + M_metadata + M_inflight + M_socket, où M_payload représente le corps des messages résidents en RAM, M_metadata correspond au surcoût d'index du processus BEAM (~32 o pour Classic Queue v2, ~140 o pour Classic Queue v1, ~384 o pour les files Quorum), M_inflight = Consommateurs * basic.qos Prefetch * (ChargeUtile + Métadonnées), et M_socket alloue de 64 Ko à 256 Ko par connexion TCP. Par exemple, 50 consommateurs avec un prefetch configuré à 100 traitant des messages de 4 Ko immobilisent à eux seuls 50 * 100 * 4,12 Ko = 20,6 Mo de mémoire non paginable en transit.
La recommandation standard en production pour vm_memory_high_watermark se situe entre 0,40 et 0,45 (soit 40 % à 45 % de la RAM totale de la machine), préservant les 55 % à 60 % restants pour le cache de pages du système d'exploitation, les tampons de sockets réseau et les phases de compactage du ramasse-miettes Erlang BEAM. Dépasser un seuil de 0,55 expose le système à un risque critique de déclenchement du tueur de processus Linux (OOM killer), car le ramasse-miettes par copie d'Erlang peut temporairement doubler la mémoire résidente d'un processus lors d'un compactage avant que les alarmes mémoire n'aient pu réguler le trafic entrant.
Pour les messages actifs conservés en mémoire, les files Quorum requièrent environ 30 % à 40 % de mémoire supplémentaire par message par rapport à Classic Queue v2 en raison du suivi du consensus Raft (terme, index et métadonnées de commandes : ~384 o contre ~32 o par message). Néanmoins, les files Quorum écrivent directement leurs segments de journal sur disque et gèrent une fenêtre de cache avec éviction, éliminant totalement la fragmentation sévère du tas Erlang et les blocages de synchronisation globale qui affectent les anciennes files classiques répliquées (HA sync).
Dès que l'utilisation globale de la mémoire Erlang dépasse vm_memory_high_watermark, RabbitMQ déclenche instantanément une alarme mémoire sur l'ensemble du cluster, cesse de lire sur les sockets TCP des producteurs et suspend le traitement des basic.publish. Les producteurs se retrouvent bloqués sur leurs tampons d'écriture TCP locaux sans recevoir d'erreur AMQP, tandis que les consommateurs continuent leur traitement sans interruption. Une fois que la mémoire résidente repasse sous le seuil d'alerte grâce à la consommation des messages et aux passes du GC de la BEAM, RabbitMQ désactive l'alarme et réactive automatiquement la lecture sur les sockets des producteurs.
Le paramètre basic.qos prefetch définit le nombre maximal de messages non acquittés que RabbitMQ transmet à un consommateur avant d'attendre un basic.ack. Les messages délivrés restent verrouillés dans la mémoire du processus Erlang et ne peuvent en aucun cas être paginés sur disque, quelle que soit la pression mémoire. Si 50 consommateurs disposent d'un prefetch de 1 000 traitant des messages de 10 Ko, cela alloue 50 * 1 000 * 10 Ko = 500 Mo de RAM non paginable en transit. Limiter le prefetch entre 50 et 100 permet de saturer la bande passante réseau tout en maintenant la RAM en transit sous le seuil des 50 Mo.
Le temps de résorption du backlog se calcule selon la formule : Temps de vidage (secondes) = Nombre de messages en attente / (Débit global de traitement des consommateurs msg/s - Débit d'ingestion msg/s). Si 20 consommateurs acquittent chacun 150 msg/s (soit 3 000 msg/s au total) face à un débit d'ingestion de 1 000 msg/s, la vitesse nette de vidage est de 2 000 msg/s. Un backlog de 500 000 messages sera résorbé en 500 000 / 2 000 = 250 secondes (soit 4 minutes et 10 secondes). Si le débit de consommation est inférieur ou égal au débit de publication, le temps de vidage devient infini et signale une accumulation incontrôlée.
Classic Queue v1 (CQv1) stocke les index de files dans les dictionnaires internes des processus Erlang, conservant 120 o à 140 o en RAM par message même après la pagination des corps de messages sur disque. À l'opposé, Classic Queue v2 (CQv2) stocke les messages et les index dans des segments de disque immuables de 32 Mo, réduisant la surcharge mémoire des messages paginés de plus de 75 %, pour atteindre environ 32 o par message. Sur un backlog de 10 millions de messages, CQv1 immobilise ~1,4 Go de mémoire d'index sur le tas Erlang, tandis que CQv2 ne requiert qu'environ 320 Mo.
Calculez l'allocation mémoire PostgreSQL et générez les paramètres PGTune de postgresql.conf. Optimisez shared_buffers, work_mem, effective_cache_size et max_connections.
Calculez la capacité de stockage utile en To décimaux et Tio binaires pour grappes RAID 0, 1, 5, 6, 10, 50, 60 et ZFS RAIDZ1/Z2/Z3 avec surcoût de parité, risque d'erreur URE lors de la reconstruction, durée estimée et visualiseur de baies.
Calculez la taille d'échantillon exacte, la puissance statistique et la durée de vos tests A/B. Résolution inverse du MDE, métriques continues, correction de Bonferroni multi-bras et détection de SRM.
Convertissez instantanément PX en REM et REM en PX avec taille de police racine personnalisée. Générez du CSS clamp() fluide, des classes Tailwind et des tables de conversion.
Vérifiez les codes d'état HTTP, testez les chaînes de redirection et analysez les en-têtes de réponse. Diagnostiquez les erreurs 1xx à 5xx, la conformité RFC et l'impact SEO.
Testez, déboguez et optimisez vos expressions régulières en temps réel. Analysez les correspondances de motifs, les groupes de capture, l'arbre syntaxique et les substitutions.