加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 由于`spawn`,Node.js应用程序的CPU使用率很高,如何记录所有

发布时间:2020-12-16 06:53:10 所属栏目:百科 来源:网络整理
导读:我的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 libra
我的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,以确定应用程序生成调用的方式和位置.

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读