Outils pour analyser le vidage du noyau à partir de Node.js
Si j'utilise gcore de faire un code dump d'un Node.js processus, quels sont les meilleurs outils pour l'analyser?
Inspiré par:
Outil pour l'analyse de java core dump
Dans mon cas précis, je suis intéressé dans l'enquête de quelques fuites de mémoire, donc je suis vraiment curieux d'avoir quelques tas d'analyse. Générale des outils et même de l'instrumentation de paquets et techniques sont également les bienvenus. Je suis la recherche Node.js très intéressant, mais l'analyse de l'exécution des outils sont tout simplement pas encore là.
source d'informationauteur Dave Dopson
Vous devez vous connecter pour publier un commentaire.
Pour enquêter sur les accidents, j'ai trouvé nœud-erreur de segmentation-gestionnaire inestimable. C'est un module que j'ai cuisiné pour obtenir un code natif trace de la pile dans le cas d'une unité de collision avec un signal - eg deref NULL conduisant à SIGSEGV
Pour enquêter sur la mémoire /des questions de répartition, voici les données que j'ai recueillies à ce jour:
1) Blog de Dave Patheco - l'auteur parle de l'utilisation d'un plugin de MDB pour arriver JS piles et autres. Malheureusement, autant que je puisse en dire, la source de ce plugin n'a jamais été publié (ni aucune forme binaire).
2) Post-mortem de Débogage dans des Environnements Dynamiques - ACM File d'attente de l'article écrit par Dave Patheco (lien dans le blog post). Alors qu'il fait pour l'arrière-plan de la lecture, l'article n'a pas beaucoup d'outils concrets et techniques.
3) nœud-panique - pure-JS outil de dumping de l'état dans le cas d'une assertion-type d'échec crash. Ne fait rien pour aider à résoudre les incidents qui proviennent de code natif défauts (SIGSEGV, etc)
4) Joyent: Débogage De Systèmes De Production - parler par Bryan Cantrill sur les outils et les techniques qu'il recommande (thx crickeys).
Sur Linux et Mac, vous pouvez utiliser llnode un plugin pour le lldb débogueur. Le projet est disponible sous la nodejs organisation sur github:
https://github.com/nodejs/llnode
Vous pouvez l'installer à partir des sources via github ou de l'utilisation de brassage Mac. Le fichier lisez-moi sur github devrait vous aider à l'installer et il y a un cours d'introduction à l'article du blog ici:
https://developer.ibm.com/node/2016/08/15/exploring-node-js-core-dumps-using-the-llnode-plugin-for-lldb/
La question d'origine était sur la mémoire de l'analyse et de la
v8 findjsobjects
etv8 findjsinstances
commandes de l'aide par la génération d'une base de l'histogramme de l'objet compte et vous permettant de recenser les instances de chaque type.Il y a un article complet sur l'utilisation de llnode pour mémoire analyse ici:
http://www.brendangregg.com/blog/2016-07-13/llnode-nodejs-memory-leak-analysis.html
2017 mise à jour: Maintenant, vous pouvez utiliser @h-hellyer est solution de (llnode, basé sur lldb plutôt que de mdb). https://stackoverflow.com/a/40045103/3221630
mdb + mdb_v8 est le chemin à parcourir.
Afin d'utiliser mdb, vous aurez besoin d'un OS pris en charge.
Maintenant, plus vous aurez de chances de fonctionner sur Linux. Si c'est votre cas:
La partie 1. obtenez votre core dump
Vous pouvez obtenir votre core dump dans de nombreuses façons.
Pour obtenir votre vidage de la mémoire à partir d'un processus en cours d'exécution, vous pouvez le faire:
La partie 2. utiliser mdb
Il ya une chance que vous savez sur Solaris, OpenSolaris, IllumOS ou SmartOS. Probablement, ce n'est pas le cas. Si vous pouvez vous permettre la mise en place de SmartOS et mdb_v8, fine.
Si pas le cas, installez VirtualBox, puis l'autopsie. Cela gère le rituel de l'installation de SmartOS ainsi que le téléchargement de votre core dump des fichiers de la VM.
Une fois que vous avez terminé, et lorsque vous êtes dans votre mdb session, vous pouvez suivre quelques étapes de cette présentation.