ab压力测试

压测
创建于:2020年09月13日

安装

yum -y install httpd-tools

使用

[[email protected] psoriasis]# ab -n 2000 -c 2000 https://api-hospital.schoolpi.net/menu/list
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking api-hospital.schoolpi.net (be patient)
Completed 200 requests
Completed 400 requests
Completed 600 requests
Completed 800 requests
Completed 1000 requests
Completed 1200 requests
Completed 1400 requests
Completed 1600 requests
Completed 1800 requests
Completed 2000 requests
Finished 2000 requests


Server Software:        nginx
Server Hostname:        api-hospital.schoolpi.net
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256

Document Path:          /menu/list
Document Length:        18 bytes #HTTP响应数据的正文长度

Concurrency Level:      2000 //并发用户数,这是我们设置的参数之一
Time taken for tests:   44.750 seconds //所有这些请求被处理完成所花费的总时间 单位秒
Complete requests:      2000 // 完成请求数 
Failed requests:        0 // 失败请求数
Write errors:           0
Non-2xx responses:      2000
Total transferred:      992000 bytes
HTML transferred:       36000 bytes
Requests per second:    44.69 [#/sec] (mean) //平均(mean)每秒完成的请求数:QPS,这是一个平均值,等于Complete requests/Time taken for tests
Time per request:       44750.047 [ms] (mean) // 用户平均请求等待时间
Time per request:       22.375 [ms] (mean, across all concurrent requests) // 服务器平均请求等待时间
Transfer rate:          21.65 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        9 1446 3914.1    230   39573
Processing:     3   19 106.2      3    3067
Waiting:        3   19 106.1      3    3067
Total:         12 1464 3919.1    246   39793

//这几行组成的表格主要是针对响应时间也就是第一个Time per request进行细分和统计。一个请求的响应时间可以分成网络链接(Connect),系统处理(Processing)和等待(Waiting)三个部分。表中min表示最小值; mean表示平均值;[+/-sd]表示标准差(Standard Deviation) ,也称均方差(mean square error),这个概念在中学的数学课上学过,表示数据的离散程度,数值越大表示数据越分散,系统响应时间越不稳定。 median表示中位数; max当然就是表示最大值了。

//需要注意的是表中的Total并不等于前三行数据相加,因为前三行的数据并不是在同一个请求中采集到的,可能某个请求的网络延迟最短,但是系统处理时间又是最长的呢。所以Total是从整个请求所需要的时间的角度来统计的。这里可以看到最慢的一个请求花费了39793ms,这个数据可以在下面的表中得到验证。

Percentage of the requests served within a certain time (ms)
  50%    246
  66%    653
  75%   1043
  80%   1453
  90%   3282
  95%   6581
  98%  13652
  99%  25535
 100%  39793 (longest request)

//这个表第一行表示有50%的请求都是在246ms内完成的,可以看到这个值和平均系统响应时间(第一个Time per request:       44750.047 [ms] (mean) )相差很大,说明系统很不稳定

以此类推,90%的请求是小于等于3282ms的。刚才我们看到响应时间最长的那个请求是39793ms,那么显然所有请求(100%)的时间都是小于等于39793毫秒的,也就是表中最后一行的数据肯定是时间最长的那个请求(longest request)。