我使用的是使用MySQL DB和node-mysql模块的Node.js + Express 3 + Jade制作的应用程序。
应用程序由PM2启动和监控。
当加载主页面时,我看到CPU的使用率非常高,如下图所示。
起始页面在MySQL数据库上执行三个查询,但是如果我放置Json对象而不是MySQL查询,那么CPU使用率似乎仍然太高。
有一种方法可以跟踪端点功能的CPU使用情况,以了解CPU使用率高的原因吗?
答案 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());