私のNode.js(私たちはv6.9.5を実行しています)のアプリケーションは、80%を超えるCPU使用率を持っています(v4でも発生します)。いくつかの基本的なプロファイリングを行った後、子プロセスの多くを生み出していることが表示されます:Node.jsアプリは `spawn`のためにCPU使用率が高いですが、どのようにすべての呼び出しをログに記録できますか?
[Summary]:
ticks total nonlib name
345 6.7% 6.9% JavaScript
4451 86.7% 89.1% C++
82 1.6% 1.6% GC
136 2.6% Shared libraries
201 3.9% Unaccounted
----------
[C++]:
ticks total nonlib name
2606 50.8% 52.2% node::ProcessWrap::Spawn(v8::FunctionCallbackInfo<v8::Value> const&)
319 6.2% 6.4% node::ContextifyScript::New(v8::FunctionCallbackInfo<v8::Value> const&)
284 5.5% 5.7% syscall
111 2.2% 2.2% write
31 0.6% 0.6% void node::StreamBase::JSMethod<node::StreamWrap, &(int
私は我々のアプリ固有のchild_process.spawn
/exec
/execFile
呼び出しのすべてにロギングを追加したが、なぜそれらのどれも説明していませんCPUはそれに多くの時間を費やしています。
私たちが使用しているnode_modules
の中にすべてchild_process
のすべての呼び出しを記録したいと思います。何らかのバグ、コールバックの過度の実行、その他の悪用私たちの側で
私は最初に、追加されたロギングを伴うchild_process
ラッパーモジュールを作成すると考えていました。そして、私たちの依存関係がNode.jsのネイティブモジュールを使用することを期待しています。残念ながら依存関係はネイティブモジュールを使い続けます。
質問:
- 私は、プロセスのすべての
spawn
のコールのロギングを追加することができますどのように?それとも、アプリのどの部分がスポーンを引き起こしているのかをより詳細に知る良い方法がありますか?場合
私は完全にオフだ:
- ティック比較的非常に多くのCPUを消費する
node::ProcessWrap::Spawn(v8::FunctionCallbackInfo<v8::Value> const&)
のための別の理由があるかもしれません、child_process
通話以外の?
何か手がかりがあります!