c – 由于`spawn`,Node.js应用程序的CPU使用率很高,如何记录所有
我的Node.js(我们运行的是v6.9.5)app经常有> 80%的CPU使用率(也发生在v4上).在进行一些基本的分析之后,它似乎产生了很多子进程:
[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调用上添加日志记录?或者有更好的方法来更深入地了解我们的应用程序的哪个部分导致产生? 如果我完全关闭: > node :: ProcessWrap :: Spawn(v8 :: FunctionCallbackInfo< v8 :: Value> const&)是否有不同的原因消耗相对如此多的CPU标记,而不是child_process调用? 任何线索都表示赞赏! 解决方法
您可以使用–trace标志启动节点.这将导致内置方法跟踪打开,每个方法调用一行将打印在控制台中,其中包含调用深度,调用名称,脚本位置,参数,调用者信息,被调用者信息等.电话.
因此,您实际上会计算跟踪中spawn实例的数量,以确定调用的次数.其次,在每次生成调用之前,您将在调用深度链中向后遍历以查看调用heirarchy,以确定应用程序生成调用的方式和位置. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |