Timing für die Garbage Collection von node.js

8

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.

  1. Ist meine Beobachtung richtig? Kann der GC bei hoher Last nicht arbeiten?
  2. Wenn ja, sollte ich die exponierte GC-Schnittstelle verwenden, um GC zu erzwingen?
  3. Blockiert GC? Soll ich GC häufiger durchführen, damit GC nicht für jeden GC lange blockiert?

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.

    
Harold Chan 12.07.2012, 08:53
quelle

1 Antwort

3

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:

%Vor%     
Jacob Groundwater 20.01.2013 04:49
quelle

Tags und Links