6

現在、node.js アプリケーションのプロファイリングを行っています。Dtrace を使用する必要があることを示唆するブログhttp://blog.nodejs.org/2012/04/25/profiling-node-js/を見つけました。ここに示す手順を使用して、ubuntu 12.04 に dtrace をインストールしました: https://askubuntu.com/questions/60940/how-do-i-install-dtrace

ただし、ノード アプリケーションの実行中にターミナルでこのコマンドを実行すると、次のようになります。

dtrace -o stacks.out -n 'profile-97/execname == "node" && arg1/{
@[jstack(100, 8000)] = count(); } tick-60s { exit(0); }'

stacks.out は、次を除いて空白のままです: CPU ID FUNCTION:NAME 1 387695 :tick-60s

何が間違っている可能性がありますか?

4

3 に答える 3

6

Linux DTrace の実装は現在非常に新しく、多くの重要な機能が欠けています (そして、本番環境で使用する準備ができていません)。具体的には、あなたが使用している DTrace 実装 (Paul Fox のもの) は、ユーザー空間のトレースをサポートするための作業があったとしても、あまり行われていません。そのため、Linux でこれを行うことはできません (現時点では)。

これを機能させるには、DTrace がより完全に実装されたオペレーティング システムを使用する必要があります。Illumosの派生製品 ( OmniOSSmartOSOpenIndianaなど) のいずれかを使用することをお勧めします。

リンク先の記事の「前提条件」セクションをもう一度お読みください。また、コンパイル時に DTrace サポートがオンになっている 32 ビット NodeJS を使用する必要があることも記載されています。

(Mac OS X には適切な DTrace 実装がありますが、記事によると、この例に必要な ustack ヘルパーはサポートされていません。)

于 2012-06-26T19:29:41.643 に答える
3

@psanford には、特に DTrace に関する問題に関する適切な回答がありますが、最初の文から、Node.js アプリをトレースできるようにする必要があるように見えます。DTrace はその方法の一例にすぎません。

その場合、node-inspectorv8-profilerを組み合わせることで、アプリケーションに必要なイントロスペクションを提供できます。Node 0.6.x で動作するかどうかはわかりませんが、最後に使用したのは 0.4.10 でした。

于 2012-06-26T20:49:31.167 に答える