Go 1.3 Garbage Collector verliert Speicher auf dem Server
Frage:
Warum ist der Go 1.3 Garbage Collector kann Serverspeicher nicht wieder für den Betrieb freigeben System?
Antwort:
Die Go-Laufzeit führt regelmäßig einen Garbage-Collection-Prozess aus, der für die Freigabe von Speicher verantwortlich ist, der nicht mehr verwendet wird. Es gibt jedoch einige Gründe, warum der Garbage Collector möglicherweise nicht den gesamten angeforderten Speicher an das Betriebssystem zurückgibt:
-
Der Heap wird freigegeben, der virtuelle Adressraum jedoch nicht : Auf Unix-basierten Plattformen verwendet Go einen Systemaufruf, um dem Betriebssystem mitzuteilen, dass es ungenutzte Teile des Heaps zurückgewinnen kann. Diese Funktion ist auf Windows-Plattformen nicht verfügbar.
-
Speicher ist nicht als frei markiert: Slices und andere Datenstrukturen werden möglicherweise nicht als freigegeben, sondern in Verwendung markiert. Dadurch wird verhindert, dass sie an das Betriebssystem zurückgegeben werden.
-
Nicht der gesamte zugewiesene Systemspeicher ist „echter“ Speicher:Speicher, der von der Laufzeit zugewiesen, aber nicht tatsächlich vom Programm verwendet wird, kann dennoch vorhanden sein vom Befehl runtime.Stats von Go als zugewiesener Speicher gemeldet werden. Das Betriebssystem nutzt diesen Speicher möglicherweise noch intern.
Obwohl Go seinen Speicherplatz nicht immer verkleinert, gibt es einige mögliche Lösungen, um das Problem zu entschärfen:
-
Speicherbereinigung erzwingen: Rufen Sie die Funktion runtime.GC() auf, um die Speicherbereinigung manuell auszulösen.
-
Erzwingen Rückgabe des Betriebssystemspeichers: Rufen Sie die Funktion runtime.FreeOSMemory auf, um Speicher explizit an das Betriebssystem zurückzugeben. Dies funktioniert erst, nachdem der GC ausgeführt wurde.
Es ist wichtig zu beachten, dass nicht der gesamte von Goroutinen belegte Speicher vom GC freigegeben wird.
Das obige ist der detaillierte Inhalt vonWarum gibt der Garbage Collector von Go 1.3 nicht immer Speicher an das Betriebssystem zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!