2012-01-02 18 views
15

Jeśli używam gcore do zrzutu kodu procesu Node.js, jakie są najlepsze narzędzia do jego analizy?Narzędzia do analizy zrzutu pamięci z Node.js

Zainspirowany: Tool for analyzing java core dump

W moim konkretnym przypadku, jestem zainteresowany w badaniu kilka wycieków pamięci, więc jestem bardzo ciekawy, aby uzyskać pewne analizy sterty. Ogólne narzędzia, a nawet pakiety i techniki oprzyrządowania są również mile widziane. Uważam, że Node.js jest bardzo interesujący, ale narzędzia do analizy środowiska wykonawczego jeszcze nie istnieją.

Odpowiedz

16
Aby zbadać awarie, znalazłem node-segfault-handler jako nieocenioną wartość. Jest to moduł, który przygotowałem, aby uzyskać ślad stosu kodu natywnego w przypadku poważnej awarii z sygnałem - np. Deref z NULL prowadzący do SIGSEGV

W celu zbadania problemów związanych z pamięcią/przydziałem, oto niektóre z danych "Do tej pory zbierane:

1) Blog post by Dave Patheco - autor mówi o użyciu wtyczki do MDB do uzyskania stosów JS i takie. Niestety, o ile wiem, źródło tej wtyczki nigdy nie zostało zwolnione (ani żadnej formy binarnej).

2) Postmortem Debugging in Dynamic Environments - Artykuł na temat kolejki ACM napisany przez Dave'a Patheco (link na blogu). Mimo że jest to WIELKIE czytanie w tle, artykuł nie zawiera wielu konkretnych narzędzi i technik.

3) node-panic - Czyste narzędzie JS do usuwania stanu w przypadku awarii typu assert-failure. Nic nie pomaga w debugowaniu błędów wywodzących się z natywnych błędów kodu (SIGSEGV, itp.)

4) Joyent: Debugging Production Systems - Dyskusja Bryana Cantrilla o narzędziach i technikach, które poleca (thx crickeys).

+1

Właśnie oglądałem ten (http://www.infoq.com/presentations/Debugging-Production-Systems). Myślę, że musisz uruchomić smarta z radości, więc możesz użyć mdb na głównym pliku, ale nie jestem tego pewien. – crickeys

+0

Dzięki za referencje. Zarówno kod źródłowy, jak i pliki binarne dla modułu MDB są dostępne od ponad roku. Są wbudowane w SmartOS (http://smartos.org/), wbudowane w Joyent Public Cloud, a źródłem jest github (https://github.com/joyent/illumos-joyent/blob/master /usr/src/cmd/mdb/common/modules/v8/mdb_v8.c). –

3

Aktualizacja 2017: Teraz możesz użyć rozwiązania @ h-hellyer (llnode, na podstawie lldb zamiast mdb). https://stackoverflow.com/a/40045103/3221630

mdb + mdb_v8 jest drogą do wyboru.

Do korzystania z mdb potrzebny jest obsługiwany system operacyjny.

Teraz najprawdopodobniej będziesz działał na systemie Linux. Jeśli jest to Twoja sprawa:

Część 1. otrzymać rdzeń zrzucić

Możesz otrzymać zrzutu na wiele sposobów. Aby uzyskać zrzutu od uruchomionego procesu można to zrobić:

pgrep -lf node # get pids 
gdb -p your_pid 

# once in gdb.. 
gcore # this will output your core dump 
detach # this will allow the process to continue to run. 

Część 2. Stosowanie MDB

Jest szansa, wiesz o Solaris, OpenSolaris, illumos lub SmartOS. Najprawdopodobniej tak nie jest. Jeśli możesz sobie pozwolić na czas konfiguracji SmartOS i mdb_v8, dobrze.

Jeśli nie, zainstaluj VirtualBox, a następnie autopsy. Zajmuje się rytuałem instalacji SmartOS, a także przesyłaniem plików zrzutu pamięci głównej do maszyny wirtualnej.

Po zakończeniu i po zakończeniu sesji mdb można wykonać kilka kroków z tego presentation.

8

W systemach Linux i Mac można używać wtyczki llnode do debuggera Lldb. Projekt jest dostępny w ramach organizacji nodejs na github:

https://github.com/nodejs/llnode

można zainstalować ze źródeł poprzez github lub użyć naparu na Mac. Readme na github powinien pomóc Ci go zainstalować i nie wprowadzający blogu artykuł tutaj:

https://developer.ibm.com/node/2016/08/15/exploring-node-js-core-dumps-using-the-llnode-plugin-for-lldb/

Oryginalny pytanie dotyczyło analizy pamięci i v8 findjsobjects i v8 findjsinstances polecenia pomogą nie generując podstawową histogram obiektu zlicza i umożliwia wyświetlanie instancji każdego typu.

Jest pełny artykuł na temat korzystania llnode do analizy pamięci tutaj: http://www.brendangregg.com/blog/2016-07-13/llnode-nodejs-memory-leak-analysis.html

+0

To świetnie, że teraz jest to obsługiwane na lldb, bez konieczności korzystania z mdb. – arboreal84