Apache Benchmark 压力测试

Apache Benchmark 压力测试

一、简介

1.1、介绍

ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

1.2、几个指标

  • 吞吐率:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
  • 并发连接数:某一时刻服务器所接受的请求数(会话数)。
  • 并发用户数:某一时刻服务器所接受的连接数,一个用户可能同时产生多个连接。
  • 用户平均请求等待时间:总请求数 / 并发用户数。
  • 服务器平均请求等待时间:处理完成所有请求数所花费的时间 / 总请求数。
  • PV: 即page view,页面浏览量,用户每一次对网站中的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。
  • UV:即Unique visitor,独立访客,通过客户端的cookies实现。即同一页面,客户端多次点击只计算一次,访问量不累计。
  • IP: 即Internet Protocol,本意本是指网络协议,在数据统计这块指通过ip的访问量。即同一页面,客户端使用同一个IP访问多次只计算一次,访问量不累计。
  • TPS:即Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。
  • QPS:即Queries Per Second的缩写,每秒能处理查询数目。是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。QPS=并发量 / 平均响应时间
  • RPS:即Requests Per Second的缩写,每秒能处理的请求数目。等效于QPS

二、安装

2.1、Windows安装ab test

下载地址
https://www.apachehaus.com/cgi-bin/download.plx

2.2、Linux安装ab test

yum -y install httpd-tools
ab -V

三、使用

参数说明:

-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。

测试:

[root@localhost ~]# ab -n 100 -c 10 http://toutou.com:8301/user/get?uid=1
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 toutou.com (be patient).....done

#测试服务器的名字
Server Software:      
#请求的URL主机名  
Server Hostname:        toutou.com
#web服务器监听的端口
Server Port:            8301

 #请求的URL中的根绝对路径
Document Path:          /user/get?uid=1
#HTTP响应数据的正文长度
Document Length:        131 bytes

# 并发用户数,这是ab命令中设置的-c参数
Concurrency Level:      10
 #所有这些请求被处理完成所花费的总时间
Time taken for tests:   1.274 seconds
# 总请求数量,这是ab命令中设置的-n参数
Complete requests:      100
 # 失败的请求数,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。对于超时时间的设置可以用ab的-t参数。如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算是失败的请求。
Failed requests:        0
#写入错误
Write errors:           0
# 总的网络传输量(字节数),包含http的头信息等。使用ab的-v参数即可查看详细的http头信息。
Total transferred:      25000 bytes
# HTML内容传输量,实际的页面传递字节数。也就是减去了Total transferred中http响应数据中头信息的长度。
HTML transferred:       13100 bytes
# 每秒处理的请求数,服务器的吞吐量,等于:Complete requests / Time taken for tests(QPS)
Requests per second:    78.48 [#/sec] (mean)
# 用户平均请求等待时间
Time per request:       127.425 [ms] (mean)
# 服务器平均处理时间
Time per request:       12.743 [ms] (mean, across all concurrent requests)
# 平均每秒网络上的流量,即每秒收到的速率
Transfer rate:          19.16 [Kbytes/sec] received
 
# 压力测试时的连接处理时间。-- min最小值、mean平均值、[+/-sd]方差、median中位数、maxz最大值
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   0.3      0       1                 # socket链路建立消耗,代表网络状况好
Processing:    20  121  54.9    119     281          # 写入缓冲区消耗+链路消耗+服务器消耗
Waiting:       13   99  48.7     93     234             # 写入缓冲区消耗+链路消耗+服务器消耗+读取数据消耗
Total:         21  122  54.8    119     281              # 单个事务总时间
ERROR: The median and mean for the initial connection time are more than twice the standard
       deviation apart. These results are NOT reliable.

Percentage of the requests served within a certain time (ms)
  50%    119
  66%    141
  75%    148
  80%    159
  90%    201
  95%    232
  98%    268
  99%    281
 100%    281 (longest request)
# 整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于119毫秒,66%的用户响应时间小于141毫秒,最大的响应时间小于281毫秒

评论

暂无

添加新评论