Node v8 Garbage Collector :: jak debugować długie czasy Mark-Sweep?

Uruchomiłem moją aplikację z flagą --trace_gc, aby spróbować znaleźć problemy z wydajnością. Wygląda na to, że mogłem go znaleźć ...

 1288678 ms: Mark-sweep 498.8 (549.0) -> 488.8 (548.0) MB, 4085 ms [idle notification: finalize idle round] [GC in old space requested].

Gadzooks! Ponad 4 sekundy na wykonanie GC. Nic dziwnego, że mam problemy.

Teraz prawdziwe pytanie: jak mogę znaleźć obiekty będące GC, a co ważniejsze, gdzie zostały przydzielone? Używałem już migawek sterty w czasie rzeczywistym, ale nie widzę wystarczających informacji, aby pomóc mi odkryć, skąd pochodzą te obiekty. Widzę pewne wskazówki, które prowadzą mnie do przekonania, że ​​mam gdzieś odniesienie cykliczne (np. Widzę setki właściwości „użytkownika” w migawce sterty po kilku wywołaniach API przez jednego użytkownika).

Czy są jakieś dobre tutoriale lub inne dobre informacje na temat śledzenia przyczyn tych dużych czasów zbierania śmieci? A może mógłbym w jakiś sposób wydrukować przydzielone obiekty, próbując znaleźć cykliczne odniesienie ...?

questionAnswers(1)

yourAnswerToTheQuestion