Le problème était la connexion à RabbitMQ. Parce que nous utilisions des canaux vivants triés, la fonction "reconnexion automatique" de RabbitMQ.Client gardait beaucoup d'état sur les canaux morts. Nous avons désactivé cette configuration, car nous n'avons pas besoin des "avantages" de la fonction "reconnexion automatique", et tout commence à fonctionner normalement. C'était pénible, mais nous devions essentiellement configurer un déploiement Windows et effectuer le processus d'analyse de mémoire habituel avec les outils Windows (Jetbrains dotMemory dans ce cas). L'utilisation de lldb n'est pas du tout productive.
Avis de non-responsabilité :je ne suis pas un assistant .NET.
Mais vous devez faire deux choses pour suivre les bonnes pratiques de Kubernetes :
-
Définissez des limites de ressources raisonnables pour votre application. Si l'application n'a pas besoin de plus de 200 Mo de mémoire, définissez une limite de ressources pour empêcher l'application de consommer toute la mémoire hôte disponible. Mais sachez que l'API Unix pour obtenir de la mémoire disponible n'est pas capable de traiter le groupe de contrôle dont dispose le processus et génère toujours la mémoire de l'hôte, peu importe ce que dit votre groupe de contrôle.
-
Indiquez à votre application quelle est cette limite de ressources. Il semble que votre application ne "ressent pas le besoin" de libérer de la mémoire car il y en a beaucoup. Presque toutes les applications, et les frameworks également, disposent d'un switch pour définir la mémoire maximale à consommer. Dites à votre application cette limite, et elle "verra" la pression de la mémoire et effectuera un GC complet (ce qui, je suppose, pourrait être le problème ici)