GNU/Linux >> Linux Esercitazione >  >> Linux

DotNet Core 2.1 accumula memoria in Linux

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:

  1. 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.

  2. 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)


Linux
  1. Utilizzo della memoria di Linux

  2. Come cancellare la cache di memoria in Linux

  3. Killer di memoria insufficiente di Linux

  4. Versione Kali Linux 2018.1

  5. L'allocazione della memoria in Linux non è bloccante?

Come cancellare la memoria di scambio in Linux

Provare .NET Core su Linux con solo un tarball (senza apt-get)

Esempi di comandi gratuiti in Linux

Come installare (.NET Core) Dotnet Core nelle distribuzioni Linux

Come compilare l'app .NET Core per Linux in un computer Windows

Segmentazione della memoria di Linux