2012-01-02 31 views
15

Node.jsプロセスのコードダンプを作成するためにgcoreを使用する場合、それを解析する最適なツールは何ですか?触発されNode.jsのコアダンプを解析するツール

:私の特定のケースで Tool for analyzing java core dump

は、私はいくつかのメモリリークを調査することに興味ので、私はいくつかのヒープ分析を得るために本当に興味があります。一般的なツール、さらには計装パッケージやテクニックも歓迎します。私はNode.jsが非常に面白いと思っていますが、ランタイム解析ツールはまだそこにはありません。

答えて

16

クラッシュを調べるために、私はnode-segfault-handlerが非常に価値があると判断しました。ハード・クラッシュが発生した場合にネイティブ・コードのスタック・トレースを得るためのモジュールです。例えば、NULLのderefがSIGSEGVにつながります。

メモリー/割り当ての問題を調べるには、今まで収集したもの:

1)Blog post by Dave Patheco - 著者は、JSスタックなどを取得するためのMDBへのプラグインの使用について話しています。残念ながら、私が知る限り、そのプラグインのソースは決してリリースされませんでした(バイナリ形式でも)。

2)Postmortem Debugging in Dynamic Environments - ACM Queueの記事、Dave Patheco(ブログ記事からリンクされています)。それは素晴らしいバックグラウンドの読書になりますが、記事には多くの具体的なツールとテクニックはありません。

3)node-panic - アサルトエラータイプのクラッシュ時に状態をダンプするためのpure-JSツール。ネイティブコードの障害(SIGSEGVなど)に起因するクラッシュをデバッグするのに役立つものは何もありません。

4)Joyent: Debugging Production Systems - 彼が推奨するツールとテクニックについては、Bryan Cantrillと相談してください(thx crickeys)。

+1

この(http://www.infoq.com/presentations/Debugging-Production-Systems):

ここでメモリ分析のためllnodeを使用しての完全な記事があります。私はあなたがコアファイルでmdbを使うことができるように、あなたが喜びからスマートを実行しなければならないと思いますが、私は本当にわかりません。 – crickeys

+0

参考になりました。 MDBモジュールのソースコードとバイナリは、1年以上利用可能です。 Joyent Public Cloudに組み込まれたSmartOS(http://smartos.org/)に組み込まれています。ソースはgithub(https://github.com/joyent/illumos-joyent/blob/master)にあります/usr/src/cmd/mdb/common/modules/v8/mdb_v8.c)。 –

3

201更新: @ h-hellyerのソリューション(lldnode、mldではなくlldbに基づいて)を使用できます。 https://stackoverflow.com/a/40045103/3221630

mdb + mdb_v8は行く方法です。

mdbを使用するには、サポートされているOSが必要です。

あなたはおそらくLinuxで動作しています。これはあなたのケースの場合:

パート1.あなたのコアは

をダンプを取得あなたは多くの方法であなたのコア・ダンプを取得することができます。 あなたがこれを行うことができます実行中のプロセスから、あなたのコアダンプを取得するには、次の

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. 

パート2.使用MDB

は、Solaris、OpenSolarisの、IllumOSまたはSmartOSについて知っている可能性があります。ほとんどの場合、これは当てはまりません。 SmartOSとmdb_v8をセットアップする時間があればうまくいきます。

インストールされていない場合は、VirtualBoxをインストールしてからautopsyをインストールしてください。これは、SmartOSのインストールとコアダンプファイルのVMへのアップロードの儀式を処理します。

作業が完了し、mdbセッション中になった場合は、presentationからいくつかの手順を実行できます。

8

LinuxおよびMacでは、lldbデバッガのプラグインとしてllnodeを使用できます。プロジェクトはgithubの上nodejs組織の下に提供されています:

https://github.com/nodejs/llnode

あなたはgithubのを介してソースからインストールするか、Macで醸造を使用することができます。 githubの上のREADMEは、あなたがそれをインストールに役立つはずですし、ここに入門ブログの記事があります:

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

元の質問には、メモリ分析についてだったとv8 findjsobjectsv8 findjsinstancesコマンドは、オブジェクトの基本的なヒストグラムを生成することによって、そこに役立ちますそれぞれのタイプのインスタンスをリストすることができます。ただ、見 http://www.brendangregg.com/blog/2016-07-13/llnode-nodejs-memory-leak-analysis.html

+0

これはmdbを使わなくてもlldbでサポートされるようになりました。 – arboreal84