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

results matching ""

    No results matching ""