Pregunta Herramientas para analizar el volcado del núcleo de Node.js


Si uso gcore para hacer un volcado de código de un proceso Node.js, ¿cuáles son las mejores herramientas para analizarlo?

Inspirado por: Herramienta para analizar el volcado de java core

En mi caso específico, estoy interesado en investigar algunas filtraciones de memoria, así que tengo mucha curiosidad por obtener un análisis de montón. También se aceptan herramientas generales e incluso paquetes y técnicas de instrumentación. Estoy descubriendo que Node.js es muy interesante, pero las herramientas de análisis del tiempo de ejecución aún no están allí.


16
2018-01-02 19:00


origen


Respuestas:


Para investigar los accidentes, he encontrado node-segfault-handler ser invaluable. Es un módulo que preparé para obtener un seguimiento de la pila de código nativo en caso de un choque fuerte con una señal, por ejemplo, deref de NULL que conduce a SIGSEGV

Para investigar problemas de memoria / asignación, aquí hay algunos de los datos que he recopilado hasta ahora:

1) Publicación del blog por Dave Patheco - el autor habla sobre usar un complemento para MDB para obtener pilas JS y cosas así. Tristemente, por lo que puedo decir, nunca se publicó la fuente de ese complemento (ni ninguna forma binaria).

2) Depuración post mortem en entornos dinámicos - Artículo de ACM Queue también escrito por Dave Patheco (vinculado desde la publicación del blog). Mientras que hace una GRAN lectura de fondo, el artículo no tiene muchas herramientas y técnicas concretas.

3) nodo-pánico - Una herramienta JS pura para el estado de dumping en el caso de una falla de tipo assert-failure. No sirve de nada para ayudar a eliminar errores que se originan a partir de fallas de código nativo (SIGSEGV, etc.)

4) Joyent: Depuración de sistemas de producción - charla de Bryan Cantrill sobre las herramientas y técnicas que recomienda (a través de crickeys).


16
2018-01-02 19:19



En Linux y Mac puede usar llnode un complemento para el depurador lldb. El proyecto está disponible en la organización nodejs en github:

https://github.com/nodejs/llnode

Puede instalar desde la fuente a través de github o usar brew en Mac. El archivo léame en github debería ayudarlo a instalarlo y aquí hay un artículo de introducción al blog:

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

La pregunta original era sobre el análisis de la memoria y el v8 findjsobjects y v8 findjsinstances los comandos le ayudarán a generar un histograma básico de recuentos de objetos y le permitirá enumerar las instancias de cada tipo.

Hay un artículo completo sobre el uso de llnode para el análisis de memoria aquí: http://www.brendangregg.com/blog/2016-07-13/llnode-nodejs-memory-leak-analysis.html


8
2017-10-14 14:01



Actualización 2017: Ahora puede usar la solución de @h-hellyer (llnode, basado en lldb en lugar de mdb). https://stackoverflow.com/a/40045103/3221630

mdb + mdb_v8 es el camino a seguir.

Para usar mdb, necesitará un sistema operativo compatible.

Ahora, lo más probable es que se ejecute en Linux. Si este es tu caso:

Parte 1. consigue tu botadero

Puede obtener su volcado de núcleo de muchas maneras. Para obtener su volcado de núcleo de un proceso en ejecución, puede hacer esto:

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.

Parte 2. usa mdb

Existe la posibilidad de que conozca Solaris, OpenSolaris, IllumOS o SmartOS. Lo más probable es que este no sea el caso. Si puede permitirse el tiempo de configurar SmartOS y mdb_v8, bien.

Si no, instale VirtualBox, y luego autopsia. Esto maneja el ritual de instalar SmartOS y cargar sus archivos de volcado de núcleo a la VM.

Una vez que haya terminado, y cuando esté en su sesión de mdb, puede seguir algunos de los pasos de este presentación.


3
2018-03-02 22:37