7

nodejsプログラムのプロファイリング中に、ティックの61%が「不明」によって引き起こされていることがわかります(以下を参照)。これは何でしょうか?何を探すべきですか?

gr、

コーエン

Statistical profiling result from node, (14907 ticks, 9132 unaccounted, 0 excluded).

 [Unknown]:
   ticks  total  nonlib   name
   9132   61.3%

 [Shared libraries]:
   ticks  total  nonlib   name
   1067    7.2%    0.0%  C:\Windows\SYSTEM32\ntdll.dll
     55    0.4%    0.0%  C:\Windows\system32\kernel32.dll

 [JavaScript]:
   ticks  total  nonlib   name
   1381    9.3%   10.0%  LazyCompile: *RowDataPacket.parse D:\MI\packet.js:9
......
4

3 に答える 3

2

依存関係を構築したモジュールをロードしていますか?

基本的に「不明」とは「説明されていない」という意味です(詳細については確認tickprocessor.jsしてください)。たとえば、GCは「scavenge、begin、...」のようなメッセージを出力しますが、それは。によって認識されませんlogreader.js

ファイルの解析に使用しているプロファイリングライブラリを知ることは役に立ちv8.logます。

アップデート

node-tickパッケージは1年以上更新されておらず、おそらく最近のコマンドの多くが欠落していますprof。代わりにnode-profilerを使用してみてください。これは、ノードのメンテナの1人によって作成されました。そして、絶対に最高の結果が必要な場合は、を使用してビルドする必要がありますnode-gyp

アップデート

node-profilerからの最新のもの(最新のタグではなく、最新のもの)v8.logを使用して出力を解析し、結果をhttp://pastebin.com/pdHDPjzEに投稿しました。master

半分ほど下に表示されるいくつかの重要なエントリを指摘させてください。

[GC]:
  ticks  total  nonlib   name
  2063   26.2%

[Bottom up (heavy) profile]
6578   83.4%  c:\node\node.exe
1812   27.5%    LazyCompile: ~parse native json.js:55
1811   99.9%      Function: ~<anonymous> C:\workspace\repositories\asyncnode_MySQL\lib\MySQL_DB.js:41
 736   11.2%    Function: ~Buffer.toString buffer.js:392

したがって、すべてのスクリプトタイプの26.2%がガベージコレクションに費やされました。これは本来よりもはるかに高いです。それはに費やされる時間とよく相関しますがBuffer.toString。その数のバッファが作成されてから文字列に変換される場合、スコープを離れるときに両方をgcする必要があります。

また、なぜそんなに多くの時間が費やされているLazyCompileのか興味がありjson.jsます。それ以上に、なぜjson.jsノードアプリケーションでさえ必要になるのでしょうか?

アプリケーションのパフォーマンスを調整するのに役立つように、以下にいくつかのリンクを含めます。これらのリンクは、何をして探すべきかについての適切な指示を提供します。

基本を備えた素敵なスライドデッキ:
https ://mkw.st/p/gdd11-berlin-v8-performance-tuning-tricks/#1

最適化手法のより高度な例:http:
//floitsch.blogspot.com/2012/03/optimizing-for-v8-introduction.html

クロージャのより良い使用:http:
//mrale.ph/blog/2012/09/23/grokking-v8-closures-for-fun.html

ここで、同じ出力を達成できなかった理由について説明します。node-profilerとその提供元をビルドして使用nprofmasterても機能しない場合は、Windows上にあることと関係があると思います。GitHubにバグを報告することを検討し、彼があなたを助けてくれるかどうかを確認してください。

于 2013-01-09T08:53:04.027 に答える
1

64ビットバージョンのNode.JSを使用してアプリケーションを実行し、32ビットビルドのd8シェルを使用してを処理していますv8.log。d8シェルのビルドターゲットとしてia32を使用する32ビットバージョンのNode.JS、またはd8シェルビルドターゲットとしてx64を使用する64ビットバージョンのNode.JSを使用すると、問題が解決するはずです。

于 2013-03-12T13:48:27.617 に答える
0

以下でプロファイリングサポートを使用してv8をビルドしてみてください。

scons prof=on d8

node --profv8のバージョンに対応するバージョンで実行していることを確認してください

次にtools/linux-tick-processor path/to/v8.log、完全なプロファイル情報が表示されます。

于 2013-02-09T15:18:04.813 に答える