压力测试一般用ab工具,ab就是apache bench,这个最常用,其他工具还有比如web bench等。
    ab工具的安装方面,可以参考:)
    压测的命令:

    1. $ ab -c200 -n1600 https://www.baidu.com/
    • -c 模拟200个客户端
    • -n 总共多少次请求(1600)
    • 还有其他参数比如-t,就是最大时间数,优先级比-n高

    ab测试的结果:

    1. ...
    2. Server Software: BWS/1.1
    3. Server Hostname: www.baidu.com
    4. Server Port: 443
    5. SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
    6. Server Temp Key: ECDH P-256 256 bits
    7. TLS Server Name: www.baidu.com
    8. Document Path: /
    9. Document Length: 227 bytes
    10. Concurrency Level: 200
    11. Time taken for tests: 13.035 seconds
    12. Complete requests: 1600
    13. Failed requests: 0
    14. Total transferred: 1777537 bytes
    15. HTML transferred: 363200 bytes
    16. Requests per second: 122.75 [#/sec] (mean)
    17. Time per request: 1629.318 [ms] (mean)
    18. Time per request: 8.147 [ms] (mean, across all concurrent requests)
    19. Transfer rate: 133.18 [Kbytes/sec] received
    20. Connection Times (ms)
    21. min mean[+/-sd] median max
    22. Connect: 164 1207 277.6 1307 1492
    23. Processing: 36 231 270.1 95 1152
    24. Waiting: 36 217 252.8 88 962
    25. Total: 218 1438 95.8 1458 2604

    上面的测试结果分析:

    • 第一部分是基本信息,本次测试的基本情况;
    • 第二部分是测试报告:
      • Concurrency Level: 200 ——- 并发数
      • Time taken for tests: 13.035 ——- seconds 总用时
      • Complete requests: 1600 ——- 成功请求数
      • Failed requests: 0 ——- 失败数
      • Total transferred: 1777537 bytes ——- 总数据传输量
      • HTML transferred: 363200 bytes ——- html数据量
      • Requests per second(QPS): 122.75 [#/sec] (mean) ——- 每秒可以并发多少请求
      • Time per request: 1629.318 [ms] (mean) ——- 每个请求的处理时间(用户平均请求等待时间)
      • Time per request: 8.147 [ms] (mean, across all concurrent requests) ——- 服务器平均请求等待时间
      • Transfer rate: 133.18 [Kbytes/sec] received ——- server的吞吐量(这些请求在单位时间内从服务器获取的数据长度)

    参考:

    QPS、Time per request、Transfer rate都是关注的指标。

    服务器性能瓶颈要分析:

    • CPU限制
    • I/O限制,比如吞吐量大致等于网卡带宽,那瓶颈大致就是网络问题
    • node程序的问题

    PS:ab命令的其他参数

    • -n 测试会话中所执行的请求个数,默认仅执行一个请求,如果不指定-t 参数,默认执行完所有请求后自动结束压测
    • -c 一次产生的请求个数,即同一时间发出多少个请求,默认为一次一个,此参数可以控制对服务器的单位时间内的并发量
    • -t 测试所进行的最大秒数,默认为无时间限制….其内部隐含值是[-n 50000],它可以使对服务器的测试限制在一个固定的总时间以内,如果时间到了,请求个数还未执行完,也会被停止。
    • -p 包含了需要POST的数据的文件,数据格式以接口请求参数定义的格式为准,eg. xxx.json #json 内容示例: {“name”:”小明”,”sex”:”男”}
    • -T POST 数据所使用的Content-type头信息,指定请求参数格式,eg. application/json
    • -r 在接口返回失败后,默认会终止压测,添加此参数后压测会继续进行
    • -v 设置显示信息的详细程度
    • -w 以HTML表格的形式输出结果,默认是白色背景的两列宽度的一张表
    • -i 以HTML表格的形式输出结果,默认是白色背景的两列宽度的一张表-x 设置属性的字符串,此属性被填入[/table]-y 设置属性的字符串
    • -z 设置[table]属性的字符串
    • -C 对请求附加一个Cookie行,其典型形式是name=value的参数对,此参数可以重复
    • -H 对请求附加额外的头信息,此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如”Accept-Encoding:zip/zop;8bit”)
    • -A HTTP验证,用冒号:分隔传递用户名及密码
    • -P 无论服务器是否需要(即是否发送了401认证需求代码),此字符串都会被发送
    • -X 对请求使用代理服务器
    • -V 显示版本号并退出
    • -k 启用HTTP KeepAlive(长连接)功能,即在一个HTTP会话中执行多个请求,默认为不启用KeepAlive功能
    • -d 不显示”percentage served within XX [ms] table”的消息(为以前的版本提供支持)
    • -S 不显示中值和标准背离值,且均值和中值为标准背离值的1到2倍时,也不显示警告或出错信息,默认会显示最小值/均值/最大值等(为以前的版本提供支持)
    • -g 把所有测试结果写入一个’gnuplot’或者TSV(以Tab分隔的)文件
    • -e 产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微秒为单位)时间
    • -h 显示使用方法
    • -k 发送keep-alive指令到服务器端