Il problema era la connessione a RabbitMQ. Poiché stavamo utilizzando l'ordinamento dei canali live, la funzione di "riconnessione automatica" di RabbitMQ.Client manteneva molto stato sui canali morti. Abbiamo disattivato questa configurazione, poiché non abbiamo bisogno dei "vantaggi" della funzione "riconnessione automatica" e tutto inizia a funzionare normalmente. È stato un problema, ma in pratica abbiamo dovuto configurare una distribuzione di Windows ed eseguire il normale processo di analisi della memoria con gli strumenti di Windows (Jetbrains dotMemory in questo caso). Usare lldb non è affatto produttivo.
Dichiarazione di non responsabilità:non sono un mago .NET.
Ma dovresti fare due cose per seguire le best practice di Kubernetes:
-
Definisci limiti di risorse ragionevoli per la tua app. Se l'app non necessita di più di 200 MB di memoria, definire un limite di risorse per impedire all'app di consumare tutta la memoria host disponibile. Ma tieni presente che l'API Unix per ottenere la memoria disponibile non è in grado di elaborare il cgroup del processo e restituisce sempre la memoria dell'host, indipendentemente da ciò che dice il tuo cgroup.
-
Dì alla tua app qual è questo limite di risorse. Sembra che la tua app non "senta il bisogno" di liberare memoria perché ce n'è in abbondanza. Quasi tutte le applicazioni, e anche i framework, dispongono di un interruttore per definire la memoria massima da consumare. Comunica alla tua app questo limite e "vedrà" la pressione della memoria ed eseguirà un GC completo (quello che immagino potrebbe essere il problema qui)