myślę używam do wycieku pamięci z ekspresowe aplikacji przy podłączeniu x liczba EventSource klientów do niego. Po połączeniu klientów i wysłaniu im x wiadomości i ich rozłączeniu, moja aplikacja zwolni tylko niewielką ilość przydzielonego Heap/RSS.Przeciek pamięci w Express.js z EventSource
Aby to potwierdzić, zapisałem Heapdump podczas uruchamiania serwera i jeden po podłączeniu 7000 klientów do niego i wysyłania x wiadomości do każdego klienta. Czekałem chwilę, aby dać GC szansę na oczyszczenie się przed zrobieniem zdjęcia sterty.
Aby porównać migawki sterty, wczytałem je w widoku profilu narzędzi programistów Chrome i wybrałem tryb "Porównanie".
Moje pytania są następujące:
1) Jak interpretować te liczby? (Dla porównania patrz załączony sterty snapshot zrzut ekranu.)
2) Na przykład wygląda na to, że gniazdo obiektów nie prawie za darmo wszelkie obiekty w ogóle, czy to prawda?
3) Czy mogę podać mi więcej wskazówek, aby zbadać problem?
Jeśli ktoś jest zainteresowany w kodzie używam go przetestować, to jest tutaj: [Server & Client Code] (https: //gist.github .com/roundrobin/a6e3d38cb24fcc112418) – BausTheBig
nie jest to przeciek pamięci, do którego dodano odniesienie i którego nie usunięto, ale nie zwolni pamięci, dopóki nadal będzie można uzyskać do niej dostęp. 'ALL_CLIENTS' ma rzeczy dodane do niego teraz zamykasz je tam, nie są usuwane z' ALL_CLIENTS', więc nadal istnieje odniesienie do nich po zakończeniu połączenia i połączenia 'delete ALL_CLIENT [key]' gdzie klucz jest Klucz bieżącego klienta, jeśli masz referencję, nie możesz usunąć danych tam, w przeciwnym razie możesz mieć odniesienie do innej pamięci aplikacji, jeśli wskoczysz tam –