8.1.1 使用 node-clinic
node-clinic(简称 clinic) 是一个开箱即用的 Node.js 应用诊断工具。
首先,安装 Node.js@9+
$ nvm install 9
全局安装 clinic:
$ npm i clinic -g
创建测试代码:
app.js
const Paloma = require('paloma')
const app = new Paloma()
function sleep (ms) {
const future = Date.now() + ms
while (Date.now() < future);
}
app.use(() => {
sleep(50)
})
app.listen(3000)
使用 clinic doctor 启动并诊断 Node.js 应用:
$ clinic doctor -- node app.js
使用 ab 压测:
$ ab -c 10 -n 200 "http://localhost:3000/"
CTRL+C 终止测试程序,终端打印出:
Warning: Trace event is an experimental feature and could change at any time.
^Canalysing data
generated HTML file is 51485.clinic-doctor.html
用浏览器打开 51485.clinic-doctor.html,如下所示:
可以看出:Event Loop 被阻塞,CPU Usage 也居高不下,一定是有 CPU 密集计算,与我们的测试代码吻合。
clinic 也给出了猜测和解决方案,我们尝试使用 clinic flame 生成火焰图:
$ clinic flame -- node app.js
也可以用以下命令代替:
$ clinic flame --collect-only -- node app.js # 只收集数据
$ clinic flame --visualize-only PID.flamegraph # 将数据生成火焰图
使用同样的 ab 命令压测后,生成的火焰图如下:
可以看出:app.js 第 4 行的 sleep 函数占用了大量的 CPU 计算。
8.1.2 参考链接
上一节:7.2 Telegraf + InfluxDB + Grafana(下).md)
下一节:8.2 alinode
看完两件小事
如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:
- 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
- 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程