Node.js高CPU使用率,如何调试呢?

时间:2016-04-08 14:56:34

标签: node.js express cpu-usage node-mysql

我使用的是使用MySQL DB和node-mysql模块的Node.js + Express 3 + Jade制作的应用程序。

应用程序由PM2启动和监控。

当加载主页面时,我看到CPU的使用率非常高,如下图所示。

usage of CPU of App Node.js

起始页面在MySQL数据库上执行三个查询,但是如果我放置Json对象而不是MySQL查询,那么CPU使用率似乎仍然太高。

有一种方法可以跟踪端点功能的CPU使用情况,以了解CPU使用率高的原因吗?

2 个答案:

答案 0 :(得分:2)

我解决了我的CPU问题,感谢分析。

我尝试在我的端点函数的更多部分中记录CPU使用率,但这种方法没有帮助。 对于每个需要获得CPU使用率的人来说,这个脚本非常好: http://gist.github.com/bag-man/5570809

要排除问题与MySQL查询有关,我创建了一个只执行查询的简单应用程序,并使用ApacheBench对其进行了测试。 该测试成功通过。

之后我找到了解决方案。

Node.js的分析在这里解释: https://nodejs.org/en/docs/guides/simple-profiling/

我使用内置的分析器运行应用程序:

NODE_ENV=development node --prof app.js

我向ApacheBench提出了一些请求

ab -k -c 20 -n 250 "http://localhost:8080/"

我生成了processed.txt

node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt

在摘要中我得到了:

 [Summary]:
   ticks  total  nonlib   name
    4036   22.6%   23.3%  JavaScript
   13130   73.6%   75.9%  C++
    1334    7.5%    7.7%  GC
     527    3.0%          Shared libraries
     144    0.8%          Unaccounted

“Bottom up(heavy)profile”与 uglify-js 模块有关:

/node_modules/with/node_modules/uglify-js/lib/parse.js

所以看看依赖关系,我看到这个模块被Jade 使用。

我的应用程序执行了大量查询并生成了一个大型Json对象,并将其传递给Jade模板引擎。

Jade使用了大量的CPU来解析传递的大对象。

首先,我将该模块的更新从0.35.0更新到1.3.1(因为pug仍处于alpha状态)。

Jade使用了大量的CPU来解析传递的大对象。

首先,我将该模块的更新从0.35.0更新到1.3.1(因为pug仍处于alpha状态)。

由于此次更新,性能提升了。

但最后我计划在没有大量查询的情况下加载页面并通过REST服务获取所需信息,而不将数据传递给Jade

答案 1 :(得分:1)

您可以使用os模块记录计算机的CPU使用情况

var os = require('os');
console.log(os.cpus());