首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于“`spawn`”,Node.js应用程序的CPU使用率很高,我如何记录对它的所有调用?

由于“`spawn`”,Node.js应用程序的CPU使用率很高,我如何记录对它的所有调用?
EN

Stack Overflow用户
提问于 2017-02-08 15:29:34
回答 1查看 811关注 0票数 4

我的Node.js (我们正在运行v6.9.5)应用程序的CPU使用率通常超过80% (也发生在v4上)。在做了一些基本的分析之后,它似乎产生了许多子进程:

代码语言:javascript
复制
[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会花这么多时间在上面。

现在,我想将child_process的所有调用记录在我们使用的所有node_modules中,以防有一个模块由于某些错误、过度急切地执行回调或其他错误而发送过多的调用。

最初,我想通过添加日志来创建child_process包装器模块,并希望我们的依赖项将使用它来支持Node.js的本机模块,不幸的是,依赖项似乎一直在使用本机模块。

问题:

  • 如何在进程的所有spawn调用上添加日志记录?或者是否有更好的方法来更深入地了解我们的应用程序的哪一部分是导致产卵的原因?

万一我完全离开了

  • 对于node::ProcessWrap::Spawn(v8::FunctionCallbackInfo<v8::Value> const&)来说,除了child_process调用之外,还有什么不同的原因来消耗如此多的CPU代码呢?

任何线索都是感激的!

EN

回答 1

Stack Overflow用户

发布于 2017-03-26 17:27:16

您可以使用--跟踪标志启动节点。这将导致内置的方法跟踪被打开,每个方法调用将在控制台中打印一行,并将调用深度、调用名称、脚本位置、参数、调用者的信息、被调用者的信息等与调用的上下文相关联。

因此,您实际上需要计算跟踪中spawn实例的数量,以确定调用了多少次。第二,在每个派生调用之前,您将在调用深度链中向后遍历,以查看调用的传家宝,以确定我们在应用程序中如何和在何处发起派生调用。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42117186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档