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

时间:2017-04-19 19:14:57

标签: node.js performance profiling performance-testing v8

我在Windows中有一个简单的nodejs应用程序(app A),它可以监听一个端口,一旦收到请求,它就会发布到另一个服务器(app B),并在MongoDB中记录响应。

App A(单线程,尚未实现集群)每秒处理大约35个请求(使用locust.io测量)。以下是应用程序A的分析信息。共享库占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 个答案:

答案 0 :(得分:0)

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

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

你是否有沉重的个人资料显示ntdll.dll中的分裂?如果他们指向促进I / O的win32 API /帮助函数,那么我会说这是你系统的一个好兆头。