Node.js性能分析工具

3,698 阅读2分钟

ab压测

ab -c 200 -n 1000  http://test.com/

-c 并发数(同时有200个人,在请求我们的服务器) -n 总共执行1000次请求

// 服务器信息
Server Software:        
Server Hostname:        127.0.0.1
Server Port:            3000    

// 返回包的信息
Document Path:          /download/    // 请求路径
Document Length:        264785 bytes       // 包长度

// 压测信息
Concurrency Level:      200          // 并发数
Time taken for tests:   0.389 seconds  // 这次测试总共花费时间
Complete requests:      1000         // 完成了的请求数 是根据返回码判断的code=200
Failed requests:        0            // 失败的请求数
Total transferred:      151000 bytes   // 总共传输的数据量
HTML transferred:       9000 bytes     // html的传输量
// 最重要的两个指标:qps和吞吐量
Requests per second:    324.22 [#/sec] (mean) // qps:每秒能处理324.22个并发量
Time per request:       616.873 [ms] (mean)  // 每次请求花的平均时间是多少
Time per request:       3.084 [ms] (mean, across all concurrent requests)
Transfer rate:          83879.42 [Kbytes/sec] received  // 吞吐量:越高越好


Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    4   2.1      4      10
Processing:    23   68  12.6     74      84
Waiting:       12   40  11.8     39      67
Total:         23   72  13.2     78      87

其它

ab -c 200 -t 15  http://test.com/

-c 200:并发数 200 -t 15:压测时间 15s

找到服务器瓶颈

通过压测的qps可以大概判断性能瓶颈在不在网卡,如果不在网卡,就可能在cpu、内存、硬盘等等

top

linux命令,监控cpu和内存,

在压测的同时开启top命令,这样就可以看出瓶颈是否在cpu或内存上

image.png

iostat

linux命令,检测各个设备的一个带宽 -- 硬盘

image.png

nodejs 自带的 profile

  1. 启动的时候加上 --prof,告诉node我们需要获取一个性能报告
node --prof entry.js
  1. 会在根目录下面出现类似下面这样的文件

isolate-0x1046ca000-24284-v8.log

  1. 对服务器进行压测

  2. 把node服务停掉,运行下面命令,生成分析文件(prof.txt)

node --prof-process isolate-0x1046ca000-24284-v8.log > prof.txt
  1. 参数解读

ticks:某一个操作占用cpu的ticks是多少 total:函数对耗时占整个运行是多少 c++:下面的耗时都是c++占用的 C++ entry points:js调用c++入口的时候的一个耗时

Bottom up (heavy) profile: 这个是我们最需要看的地方 parent:按照调用栈来的,占父的调用的一个比例,先看第一行,然后根据格式往下找

image.png

Chrome devtool

  1. 启动调试并暂停程序运行(brk),进入调试工具之后再继续执行 node --inspect-brk entry.js

image.png

  1. 在Chrome浏览器中输入 chrome://inspect

image.png

  1. 启动profile

image.png

  1. 点击stop,分析数据

image.png

  1. 如果是远端服务器也可以调试

image.png

clinic

提供更多的可视化分析图标,大型项目比较适合

npm i -g clinic