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