如何推断 node.js 分析结果?

Posted

技术标签:

【中文标题】如何推断 node.js 分析结果?【英文标题】:How to infer node.js profiling results? 【发布时间】:2017-04-19 19:14:56 【问题描述】:

我在 Windows 中有一个简单的 nodejs 应用程序(应用程序 A),它侦听一个端口,并在收到请求后立即发布到另一台服务器(应用程序 B)并在 MongoDB 中记录响应。

应用 A(单线程,尚未实现集群)每秒处理大约 35 个请求(使用 locust.io 测量)。以下是应用 A 的 profiling 信息。97.8% 的时间由共享库占用,其中 93.5% 是由于 ntdll.dll。这是正常的还是可以修复的潜在瓶颈?

 [Summary]:
       ticks  total  nonlib   name
       6023    2.0%   87.8%  javascript
          0    0.0%    0.0%  C++
        502    0.2%    7.3%  GC
      300434   97.8%          Shared libraries
        834    0.3%          Unaccounted

 [Shared libraries]:
   ticks  total  nonlib   name
  287209   93.5%          C:\windows\SYSTEM32\ntdll.dll
  12907    4.2%          C:\Program Files\nodejs\node.exe
    144    0.0%          C:\windows\system32\KERNELBASE.dll
    133    0.0%          C:\windows\system32\KERNEL32.DLL
     25    0.0%          C:\windows\system32\WS2_32.dll
     15    0.0%          C:\windows\system32\mswsock.dll
      1    0.0%          C:\windows\SYSTEM32\WINMM.dll
[Bottom up (heavy) profile]:
  Note: percentage shows a share of a particular caller in the total
  amount of its parent calls.
  Callers occupying less than 2.0% are not shown.

[Bottom up (heavy) profile]:
  Note: percentage shows a share of a particular caller in the total
  amount of its parent calls.
  Callers occupying less than 2.0% are not shown.

   ticks parent  name
  287209   93.5%  C:\windows\SYSTEM32\ntdll.dll
   6705    2.3%    C:\Program Files\nodejs\node.exe
    831   12.4%      LazyCompile: <anonymous> C:\opt\acuity\proxy\nodejs\node_modules\mongoose\node_modules\mongodb-core\lib\topologies\server.js:786:54
    826   99.4%        LazyCompile: *Callbacks.emit 

【问题讨论】:

您找到解决方案了吗?如果是的话,请你分享一下。 【参考方案1】:

在典型的应用程序(CPU 绑定和 I/O 绑定工作负载的混合)中,我会说进程能够在分配给它的 CPU 插槽中运行的越多越好 - 这样我们会看到更多的 CPU 消耗在用户空间,而不是内核空间。

在 Node.js 中,由于 I/O 会被延迟,直到它可以被操作,当它们准备好被操作时,我们可以看到操作系统空间中的活动增加。如果大量使用 ntdll.dll 是为了执行 I/O,我会说这不是问题,而是表明系统性能良好。

您是否有过重的配置文件显示 ntdll.dll 中的拆分?如果他们指向有助于 I/O 的 win32 API / 辅助函数,那么我会说这是您系统的一个好兆头。

【讨论】:

以上是关于如何推断 node.js 分析结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.JS 中进行多个查询(构建数据库)?

用node.js对一个英语句子分析页面进行一个小爬虫

如何安装和配置 AngularJS Eclipse

node.js -- 同步执行命令并获取结果

如何在 Node.js 的一个 json 中附加两个查询结果

如何在 Javascript/Node.js 中访问函数的结果 [重复]