在学习ab工具之前,我们需了解几个关于压力测试的概念
吞吐率(Requests per second)
概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests
并发连接数(The number of concurrent connections)
概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
并发用户数(The number of concurrent users,Concurrency Level)
概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
服务器平均请求等待时间(Time per request: across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level
-
QPS
QPS Queries Per Second 是每秒查询率 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。 -
TPS
TPS Transactions Per Second 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数, -
并发数
并发数(并发度):指系统同时能处理的请求数量,同样反应了系统的负载能力。这个数值可以分析机器1s内的访问日志数量来得到 -
吐吞量
吞吐量是指系统在单位时间内处理请求的数量,TPS、QPS都是吞吐量的常用量化指标。
一个系统的吞吐量(承压能力)与request(请求)对cpu的消耗,外部接口,IO等等紧密关联。
单个request 对cpu消耗越高,外部系统接口,IO影响速度越慢,系统吞吐能力越低,反之越高。
- QPS和TPS区别
个人理解如下:
Tps即每秒处理事务数,包括了
用户请求服务器
服务器自己的内部处理
服务器返回给用户
这三个过程,每秒能够完成N个这三个过程,Tps也就是N;
Qps基本类似于Tps,但是不同的是,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。
ab工具简介
ab全称为:apache bench
在官网上的解释如下:
ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。
其他网站解释:
ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。
安装ab工具
# yum -y install httpd-tools
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirrors.cloud.aliyuncs.com
* centos-sclo-rh: mirrors.aliyun.com
* elrepo: mirrors.tuna.tsinghua.edu.cn
* extras: mirrors.cloud.aliyuncs.com
* updates: mirrors.cloud.aliyuncs.com
base | 3.6 kB 00:00:00
centos-sclo-rh | 3.0 kB 00:00:00
elrepo | 3.0 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/7): epel/x86_64/updateinfo | 1.1 MB 00:00:00
(2/7): epel/x86_64/group_gz | 96 kB 00:00:00
(3/7): extras/7/x86_64/primary_db | 247 kB 00:00:00
(4/7): epel/x86_64/primary_db | 7.0 MB 00:00:00
(5/7): updates/7/x86_64/primary_db | 16 MB 00:00:00
(6/7): elrepo/primary_db | 411 kB 00:00:01
(7/7): centos-sclo-rh/x86_64/primary_db | 3.4 MB 00:00:12
Resolving Dependencies
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-97.el7.centos.5 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
============================================================================================================================================================================
Package Arch Version Repository Size
============================================================================================================================================================================
Installing:
httpd-tools x86_64 2.4.6-97.el7.centos.5 updates 94 k
Transaction Summary
============================================================================================================================================================================
Install 1 Package
Total download size: 94 k
Installed size: 168 k
Downloading packages:
httpd-tools-2.4.6-97.el7.centos.5.x86_64.rpm | 94 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : httpd-tools-2.4.6-97.el7.centos.5.x86_64 1/1
Verifying : httpd-tools-2.4.6-97.el7.centos.5.x86_64 1/1
Installed:
httpd-tools.x86_64 0:2.4.6-97.el7.centos.5
Complete!
查看ab压力测试工具版本
# ab -V
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/
ab工具的语法
ab [options] [http://]hostname[:port]/path
ab工具语法的参数
参数 | 解释 |
---|---|
-n |
即requests,用于指定压力测试总共的执行次数。 |
-c |
即concurrency,用于指定压力测试的并发数。 |
-t |
即timelimit,等待响应的最大时间(单位:秒)。 |
-b |
即windowsize,TCP发送/接收的缓冲大小(单位:字节)。 |
-p |
即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。 |
-u |
即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。 |
-T |
即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。 |
-v |
即verbosity,指定打印帮助信息的冗余级别。 |
-w |
以HTML表格形式打印结果。 |
-i |
使用HEAD请求代替GET请求。 |
-x |
插入字符串作为table标签的属性。 |
-y |
插入字符串作为tr标签的属性。 |
-z |
插入字符串作为td标签的属性。 |
-C |
添加cookie信息,例如:“Apache=1234”(可以重复该参数选项以添加多个)。 |
-H |
添加任意的请求头,例如:“Accept-Encoding: gzip”,请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。 |
-A |
添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。 |
-P |
添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。 |
-X |
指定使用的代理服务器和端口号,例如:“126.10.10.3:88”。 |
-V |
打印版本号并退出。 |
-k |
使用HTTP的KeepAlive特性。 |
-d |
不显示百分比。 |
-S |
不显示预估和警告信息。 |
-g |
输出结果信息到gnuplot格式的文件中。 |
-e |
输出结果信息到CSV格式的文件中。 |
-r |
指定接收到错误信息时不退出程序。 |
-h |
显示用法信息,其实就是ab -help。 |
工具使用
# GET
ab -n10 -c4 http://localhost:8080/test
# POST
ab -n400 -c20 -p parm.txt -T "application/x-www-form-urlencoded" http://localhost:8080/test
数值分析

Concurrency Level: 10 (并发数)
Time taken for tests: 0.017 seconds (压力测试消耗的总时间)
Complete requests: 10 (压力测试的的总次数)
Failed requests: 0 (失败的请求数)
Total transferred: 1350 bytes (传输的总数据量)
HTML transferred: 30 bytes (HTML文档的总数据量)
Requests per second: 587.65 [#/sec] (mean) (平均每秒的请求数)
Time per request: 17.017 [ms] (mean) (所有并发用户(这里是10)都请求一次的平均时间)
Time per request: 1.702 [ms] (mean, across all concurrent requests) (单个用户请求一次的平均时间)
Transfer rate: 77.47 [Kbytes/sec] received (传输速率,单位:KB/s)
# ab -n 100 -c 10 https://www.baidu.com/
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 www.baidu.com (be patient)...SSL handshake failed (1).
140614719878912:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1493:SSL alert number 40
..done
#web服务器的信息,可以看到服务器采用的是BWS/1.1,域名是www.baidu.com,端口是443
Server Software: BWS/1.1
Server Hostname: www.baidu.com
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
#关于请求的文档的相关信息,所在位置“/”,文档的大小为227 bytes(此为http响应的正文长度)
Document Path: /
Document Length: 227 bytes
Concurrency Level: 10 #并发数
Time taken for tests: 0.884 seconds #/整个测试持续的时间
Complete requests: 100 #压力测试的总请求次数
Failed requests: 1 #失败的请求数
(Connect: 0, Receive: 0, Length: 1, Exceptions: 0)
Write errors: 0
Total transferred: 109981 bytes #传输的总数据量
HTML transferred: 22473 bytes #HTML文档的总数据量
Requests per second: 113.13 [#/sec] (mean) #吞吐率,平均每秒的请求数,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
Time per request: 88.390 [ms] (mean) # 用户平均请求等待时间,所有并发用户(这里是100)都请求一次的平均时间,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值
Time per request: 8.839 [ms] (mean, across all concurrent requests) #服务器平均请求处理时间,单个用户请求一次的平均时间
Transfer rate: 121.51 [Kbytes/sec] received #平均每秒网络上的流量,传输速率,单位:KB/s
#网络上消耗的时间的分解
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 59 6.7 59 75
Processing: 18 20 2.4 19 41
Waiting: 18 19 1.0 19 26
Total: 41 78 5.3 78 101
#每个请求处理时间的分布情况,50%的处理时间在78ms内,66%的处理时间在80ms内...,重要的是看90%的处理时间。
Percentage of the requests served within a certain time (ms)
50% 78
66% 80
75% 81
80% 81
90% 83
95% 85
98% 88
99% 101
100% 101 (longest request)
模拟并发请求100次,总共请求10000次
命令模板:
ab -c 100 -n 10000 待测试网站(建议完整路径)
内容解释:
Server Software: nginx/1.10.2 (服务器软件名称及版本信息)
Server Hostname: 192.168.1.106(服务器主机名)
Server Port: 80 (服务器端口)
Document Path: /index1.html. (供测试的URL路径)
Document Length: 3721 bytes (供测试的URL返回的文档大小)
Concurrency Level: 1000 (并发数)
Time taken for tests: 2.327 seconds (压力测试消耗的总时间)
Complete requests: 5000 (的总次数)
Failed requests: 688 (失败的请求数)
Write errors: 0 (网络连接写入错误数)
Total transferred: 17402975 bytes (传输的总数据量)
HTML transferred: 16275725 bytes (HTML文档的总数据量)
Requests per second: 2148.98 [#/sec] (mean) (平均每秒的请求数) 这个是非常重要的参数数值,服务器的吞吐量
Time per request: 465.338 [ms] (mean) (所有并发用户(这里是1000)都请求一次的平均时间)
Time request: 0.247 [ms] (mean, across all concurrent requests) (单个用户请求一次的平均时间)
Transfer rate: 7304.41 [Kbytes/sec] received 每秒获取的数据长度 (传输速率,单位:KB/s)
...
Percentage of the requests served within a certain time (ms)
50% 347 ## 50%的请求在347ms内返回
66% 401 ## 60%的请求在401ms内返回
75% 431
80% 516
90% 600
95% 846
98% 1571
99% 1593
100% 1619 (longest request)
注意事项
1.测试机与被测试机要分开
2.不要对线上的服务器做压力测试
3.观察测试工具ab所在机器,以及被测试的前端机的CPU、内存、网络等都不超过最高限度的75%
网友评论