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