Vor kurzem habe ich Ссылка zur Entwicklung installiert, um zu untersuchen, wie GC mit meinem Programm interagiert.
Ich habe das Ereignis "stat" gebunden, der arthor gibt an, dass das Ereignis ausgelöst wird, wenn GC ausgeführt wird.
Ich habe festgestellt, dass wenn das Skript mit hoher Belastung. Die "stat" -Ereignisse werden nicht ausgelöst. Ich bin mir nicht sicher, ob es bedeutet, GC wird nicht durchgeführt, aber es ist ein Zeichen, dass GC möglicherweise nicht ausgelöst haben.
In meinem Produktionsserver ist das Laden im Laufe des Tages sogar viel höher. Ich bin mir ziemlich sicher, dass GC keine Chance hat zu performen. Die Speichernutzung hat keine Chance zu verringern. Es ist wie Speicherverlust.
Ich weiß, dass manuelle GC keine gute Idee ist (Es gibt jemanden, der die Idee des manuellen GC in node.js ablehnt, aber ich kann den Link nicht als Referenz finden), aber ich sehe, dass die Speichernutzung kontinuierlich zunimmt. Es muss wirklich gelöst werden.
Es gibt 3 Arten von GC-Ereignissen in V8
kGCTypeMarkSweepCompact
kGCTypeScavenge
kGCTypeAll
V8 führt das scavenge-Ereignis häufig aus, aber nur bei neu erstellten Objekten. Während einer starken Belastung können die anderen Arten von GC selten auftreten.
Sie können versuchen, den Agenten NodeFly auszuführen, der verwendet nodefly-gcinfo-Modul , um die laufende Speichernutzung zu verfolgen.
Sie können auch direkt nodefly-gcinfo
aufrufen, das über einen Rückruf verfügt, der bei jedem Auftreten eines GC-Ereignisses ausgeführt wird:
Tags und Links garbage-collection node.js