Herramientas para analizar volcado de núcleo de Node.js
heap instrumentation (3)
En Linux y Mac, puede usar llnode un complemento para el depurador lldb. El proyecto está disponible bajo la organización nodejs en github:
https://github.com/nodejs/llnode
Puedes 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 introductorio de blog:
La pregunta original era sobre el análisis de memoria y los v8 findjsobjects
y v8 findjsinstances
lo ayudarán a generar un histograma básico de conteos de objetos y permitirle listar 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
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 núcleo java.
En mi caso específico, estoy interesado en investigar algunas fugas de memoria, así que tengo mucha curiosidad por obtener un análisis de pila. Herramientas generales e incluso paquetes y técnicas de instrumentación también son bienvenidos. Me parece que Node.js es muy interesante, pero las herramientas de análisis de tiempo de ejecución aún no están allí.
Para investigar fallos, he encontrado node-segfault-handler es invaluable. Es un módulo que preparé para obtener un seguimiento de la pila de código nativo en el caso de que se produjera un fallo grave con una señal, p. Ej.
Para investigar problemas de memoria / asignación, he aquí algunos de los datos que he recopilado hasta ahora:
1) Publicación en el blog de Dave Patheco : el autor habla sobre el uso de un complemento para MDB para obtener pilas de JS y demás . Lamentablemente, por lo que puedo decir, la fuente de ese complemento nunca se publicó (ni ninguna forma binaria).
2) Depuración postmortem en entornos dinámicos : artículo de la cola ACM también escrito por Dave Patheco (vinculado desde la publicación del blog). Si bien es una gran lectura de fondo, el artículo no tiene muchas herramientas y técnicas concretas.
3) node-panic : una herramienta de JS puro para el estado de volcado en el caso de que se produzca un fallo de tipo de fallo de aserción. No hace nada para ayudar a los errores de depuración que se originan a partir de fallas de código nativo (SIGSEGV, etc.)
4) Joyent: depuración de los sistemas de producción : charla de Bryan Cantrill sobre las herramientas y técnicas que recomienda (gracias a los crickeys).
Actualización de 2017: ahora puede usar la solución de @ h-hellyer (llnode, basado en lldb en lugar de mdb). https://.com/a/40045103/3221630
mdb + mdb_v8 es el camino a seguir.
Para utilizar mdb, necesitará un sistema operativo compatible.
Ahora, lo más probable es que esté ejecutando en Linux. Si este es tu caso:
Parte 1. obtener su volcado de núcleo
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. utilizar 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 autopsy . Esto controla el ritual de instalación de SmartOS, así como la carga de sus archivos de volcado de núcleo a la máquina virtual.
Una vez que haya terminado, y cuando esté en su sesión de mdb, puede seguir algunos de los pasos de esta presentation .