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或内存上
iostat
linux命令,检测各个设备的一个带宽 -- 硬盘
nodejs 自带的 profile
- 启动的时候加上 --prof,告诉node我们需要获取一个性能报告
node --prof entry.js
- 会在根目录下面出现类似下面这样的文件
isolate-0x1046ca000-24284-v8.log
-
对服务器进行压测
-
把node服务停掉,运行下面命令,生成分析文件(prof.txt)
node --prof-process isolate-0x1046ca000-24284-v8.log > prof.txt
- 参数解读
ticks:某一个操作占用cpu的ticks是多少 total:函数对耗时占整个运行是多少 c++:下面的耗时都是c++占用的 C++ entry points:js调用c++入口的时候的一个耗时
Bottom up (heavy) profile: 这个是我们最需要看的地方 parent:按照调用栈来的,占父的调用的一个比例,先看第一行,然后根据格式往下找
Chrome devtool
- 启动调试并暂停程序运行(brk),进入调试工具之后再继续执行 node --inspect-brk entry.js
- 在Chrome浏览器中输入 chrome://inspect
- 启动profile
- 点击stop,分析数据
- 如果是远端服务器也可以调试
clinic
提供更多的可视化分析图标,大型项目比较适合
npm i -g clinic