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

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""