Node.js应用的可视化调试与性能分析

移动开发
对于大多数的前端开发者来讲,对 Chrome 浏览器自带的 DevTools 并不陌生。新版本的 Node.js 开始支持新的 Chrome DevTools Protocol,通过 node --inspect app.js 即可启动新版本的调试协议,借助 Chrome DevTools 即可达到与以往调试 Web 页面一样的使用体验。

在 Node.js v6.3 之前的版本,调试程序使用的是旧的 V8 Debugger Protocol,可以通过 node --debug app.js 来进行。而为了能在图形界面下进行可视化断点调试,需要借助 VSCode、WebStorm 之类的编辑器和插件,或者安装额外的工具,比如 node-inspector 。

对于大多数的前端开发者来讲,对 Chrome 浏览器自带的 DevTools 并不陌生。新版本的 Node.js 开始支持新的 Chrome DevTools Protocol,通过 node --inspect app.js 即可启动新版本的调试协议,借助 Chrome DevTools 即可达到与以往调试 Web 页面一样的使用体验。

一些编辑器也开始支持新的 Node.js 调试协议,或者通过安装 Chrome 插件 NIM 来支持。但是如果你电脑上已安装了 Node.js 6.3+ 和 Chrome 55+,那么不再需要任何额外的工具即可轻轻松松调试你的 Node.js 程序了。

断点调试

首先让我们新建一个程序文件 app.js 以便体验新的调试方式:

 

  1. const http = require('http'); 
  2. const server = http.createServer(function (req, res) { 
  3.   res.writeHead(200, { 'content-type''text/html' }); 
  4.   res.end('<h1>It works!</h1>'); 
  5. }); 
  6. server.listen(3000, function () { 
  7.   console.log('Listening on http://localhost:3000'); 
  8. }); 

然后执行以下命令启动程序并进入调试模式:

  1. node --inspect app.js 

可以看到控制台打印出以下信息:

 

  1. Debugger listening on ws://127.0.0.1:9229/1bde07a4-2afa-44b1-a3bc-45aa9977ff67 
  2. For help see https://nodejs.org/en/docs/inspector 
  3. Listening on http://localhost:3000 

此时,打开 Chrome 浏览器(需要 Chrome 55 或更高版本),在地址栏中输入 chrome://inspect 并按回车,会打开如下界面:

Node.js应用的可视化调试与性能分析

点击界面上的 Open dedicated DevTools for Node 链接即可打开调试窗口:

Node.js应用的可视化调试与性能分析

在该窗口中点击 Sources 标签,并在左侧边栏的 file:// 下找到我们编写的源码文件 app.js 即可看到其源码。如果要进行断点调试,只需要在源码的行号上点一下即可:

Node.js应用的可视化调试与性能分析

在窗口的右侧边栏,可以看到 Watch(监视) 、 Call Stack(调用堆栈) 、 Scope(作用域) 等信息。你也可以直接在源码窗口修改里面的代码,并按 ⌘ + S (Windows 系统是 Ctrl + S )保存即可立即生效。

性能分析

通过调试界面的 Profiler 标签可以分析哪些 Node.js 程序的 CPU 占用比较高:

Node.js应用的可视化调试与性能分析

我们可以借助 wrk 命令进行简单的 HTTP 接口测试。首先点击界面中的 Start 按钮开始记录 CPU 占用信息,然后在命令行窗口执行以下命令(启动 5 个线程,100 个并发连接,持续 1 分钟):

  1. wrk -c 100 -t 5 -d 1m http://localhost:3000/ 

等待 1 分钟,命令执行完毕后,在 DevTools 界面点击 Stop 按钮,即可看到如下的结果:

Node.js应用的可视化调试与性能分析

另外还可以通过 Memory 标签来进行内存占用相关的分析。

调试 TypeScript 程序

如果你的程序是使用 TypeScript 编写的,可以借助 ts-node 来启动调试模式:

  1. ts-node --inspect app.ts 

或者:

  1. node --inspect --require ts-node/register app.ts 

调试正在运行的 Node.js 进程

如果程序启动的时候没有加上 --inspect 选项,为了让它进入调试模式,可以给该进程发送 SIGUSR1 信号来调试(92801 是被调试 Node.js 进程的 PID,根据实际情况替换):

  1. kill -s SIGUSR1 92801 

可以看到该进程控制台会打印出以下提示:

 

  1. Debugger listening on ws://127.0.0.1:9229/cc35d4da-c8ae-42e3-943a-8ac81d5c067a 
  2. For help see https://nodejs.org/en/docs/inspector 

此时按照上文的方法使用 Chrome DevTools 调试即可。

责任编辑:未丽燕 来源: 早起搬砖
相关推荐

2020-12-04 17:15:17

数据可视化node.js

2020-07-31 13:35:34

Node.js应用分析前端

2012-02-02 15:14:29

Node.js

2015-12-14 10:39:14

2015-11-04 09:18:41

Node.js应用性能

2019-07-09 14:50:15

Node.js前端工具

2017-03-20 13:43:51

Node.js内存泄漏

2017-03-19 16:40:28

漏洞Node.js内存泄漏

2021-05-21 09:36:42

开发技能代码

2020-09-04 15:06:04

Docker容器化Node.js

2023-03-07 14:31:44

Node.jsPython应用程序

2017-02-07 15:54:14

数据可视化数据分析

2020-01-03 16:04:10

Node.js内存泄漏

2022-10-28 15:51:24

JavaScript开发Node.js

2011-11-10 11:08:34

Node.js

2021-12-01 00:05:03

Js应用Ebpf

2022-08-28 16:30:34

Node.jsDocker指令

2020-12-28 08:48:44

JS工具fastify

2020-12-14 15:40:59

Nodefastifyjs

2017-02-23 08:30:01

点赞
收藏

51CTO技术栈公众号