阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

网站性能压力测试工具:Apache ab使用详解

237次阅读
没有评论

共计 4636 个字符,预计需要花费 12 分钟才能阅读完成。

ab 是 Apache 自带的压力测试工具。ab 非常实用,它不仅可以对 Apache 服务器进行网站访问压力测试,也可以对其它类型的服务器进行压力测试。比如 Nginx、Tomcat、IIS 等。

下面我们开始介绍有关 ab 命令的使用:
1、ab 的原理
2、ab 的安装
3、ab 参数说明
4、ab 性能指标
5、ab 实际使用

一、ab 的原理
ab 是 apachebench 命令的缩写。

ab 的原理:ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问。它的测试目标是基于 URL 的,因此,它既可以用来测试 apache 的负载压力,也可以测试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。

ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似 CC 攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

二、ab 的安装

$ yum install httpd-tools
命令执行完成后,就可以直接运行 ab。

三、ab 参数说明
网站性能压力测试工具:Apache ab 使用详解

下面我们对这些参数进行相关说明。如下:
-n:在测试会话中所执行的请求个数。默认时,仅执行一个请求。

-c:一次产生的请求个数。默认是一次一个。

-t:测试所进行的最大秒数。其内部隐含值是 -n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。

-p:包含了需要 POST 的数据的文件。

-P:对一个中转代理提供 BASIC 认证信任。用户名和密码由一个: 隔开,并以 base64 编码形式发送。无论服务器是否需要(即是否发送了 401 认证需求代码),此字符串都会被发送。

-T:POST 数据所使用的 Content-type 头信息。

-v:设置显示信息的详细程度 - 4 或更大值会显示头信息,3 或更大值可以显示响应代码(404,200 等),2 或更大值可以显示警告和其他信息。

-V:显示版本号并退出。

-w:以 HTML 表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。

-i:执行 HEAD 请求,而不是 GET。

-x:设置 <table> 属性的字符串。

-X:对请求使用代理服务器。

-y:设置 <tr> 属性的字符串。

-z:设置 <td> 属性的字符串。

-C:对请求附加一个 Cookie: 行。其典型形式是 name=value 的一个参数对,此参数可以重复。

-H:对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,”Accept-Encoding:zip/zop;8bit”)。

-A:对服务器提供 BASIC 认证信任。用户名和密码由一个: 隔开,并以 base64 编码形式发送。无论服务器是否需要(即, 是否发送了 401 认证需求代码),此字符串都会被发送。

-h:显示使用方法。

-d:不显示 ”percentage served within XX [ms] table” 的消息(为以前的版本提供支持)。

-e:产生一个以逗号分隔的 (CSV) 文件,其中包含了处理每个相应百分比的请求所需要 (从 1% 到 100%) 的相应百分比的 (以微妙为单位) 时间。由于这种格式已经“二进制化”,所以比 ’gnuplot’ 格式更有用。

-g:把所有测试结果写入一个 ’gnuplot’ 或者 TSV(以 Tab 分隔的)文件。此文件可以方便地导入到 Gnuplot,IDL,Mathematica,Igor 甚至 Excel 中。其中的第一行为标题。

-i:执行 HEAD 请求,而不是 GET。

-k:启用 HTTP KeepAlive 功能,即在一个 HTTP 会话中执行多个请求。默认时,不启用 KeepAlive 功能。

-q:如果处理的请求数大于 150,ab 每处理大约 10% 或者 100 个请求时,会在 stderr 输出一个进度计数。此 - q 标记可以抑制这些信息。

四、ab 性能指标
在进行性能测试过程中有几个指标比较重要:

1、吞吐率(Requests per second)
服务器并发处理能力的量化描述,单位是 reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。

记住:吞吐率是基于并发用户数的。这句话代表了两个含义:
a、吞吐率和并发用户数相关
b、不同的并发用户数下,吞吐率一般是不同的

计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second=Complete requests/Time taken for tests

必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。

2、并发连接数(The number of concurrent connections)
并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。

3、并发用户数(Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。在 HTTP/1.1 下,IE7 支持两个并发连接,IE8 支持 6 个并发连接,FireFox3 支持 4 个并发连接,所以相应的,我们的并发用户数就得除以这个基数。

4、用户平均请求等待时间(Time per request)

计算公式:处理完成所有请求数所花费的时间 /(总请求数 / 并发用户数),即:
Time per request=Time taken for tests/(Complete requests/Concurrency Level)

5、服务器平均请求等待时间(Time per request:across all concurrent requests)

计算公式:处理完成所有请求数所花费的时间 / 总请求数,即:
Time taken for/testsComplete requests
可以看到,它是吞吐率的倒数。

同时,它也等于用户平均请求等待时间 / 并发用户数,即
Time per request/Concurrency Level

五、ab 实际使用
1、ab 的命令参数比较多,我们经常使用的是 - c 和 - n 参数。

我们现在就来测试 apache 的性能。使用如下命令:

$ ab -n 100 -c 10 http://13.209.21.196:8080/trade-server/test/order/testQueue

-n 100 表示请求总数为 100
-c 10 表示并发用户数为 10
http://13.209.21.196:8080/trade-server/test/order/testQueue 表示请求的目标 URL

这行表示处理 100 个请求并每次同时运行 10 次请求。
网站性能压力测试工具:Apache ab 使用详解
通过上图,测试结果一目了然,ab 测试得出吞吐率为:Requests per second: 5655.47[#/sec](mean)。

除此之外还有其他一些信息,需要说明下,如下:
Server Software表示被测试的 Web 服务器软件名称。

Server Hostname表示请求的 URL 主机名。

Server Port表示被测试的 Web 服务器软件的监听端口。

Document Path表示请求的 URL 中的根绝对路径,通过该文件的后缀名,我们一般可以了解该请求的类型。

Document Length表示 HTTP 响应数据的正文长度。

Concurrency Level表示并发用户数,这是我们设置的参数之一。

Time taken for tests表示所有这些请求被处理完成所花费的总时间。

Complete requests表示总请求数量,这是我们设置的参数之一。

Failed requests表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。如果接收到的 HTTP 响应数据的头信息中含有 2XX 以外的状态码,则会在测试结果中显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中。

Total transferred表示所有请求的响应数据长度总和,包括每个 HTTP 响应数据的头信息和正文数据的长度。注意这里不包括 HTTP 请求数据的长度,仅仅为 web 服务器流向用户 PC 的应用层数据总长度。

HTML transferred表示所有请求的响应数据中正文数据的总和,也就是减去了 Total transferred 中 HTTP 响应数据中的头信息的长度。

Requests per second吞吐率,也叫 QPS,计算公式:Complete requests/Time taken for tests

Time per request用户平均请求等待时间,从用户角度看,完成一个请求所需要的时间。计算公式:Time token for tests/(Complete requests/Concurrency Level)。

Time per requet(across all concurrent request)服务器完成一个请求的时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。
也可以这么统计:Time per request/Concurrency Level。

Transfer rate表示网络传输速度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

对于大文件的请求测试,这个值很容易成为系统瓶颈所在。要确定该值是不是瓶颈,需要了解客户端和被测服务器之间的网络情况,包括网络带宽和网卡速度等信息。

Percentage of requests served within a certain time(ms)
这部分数据用于描述每个请求处理时间的分布情况,比如以上测试,80% 的请求处理时间都不超过 2ms,这个处理时间是指前面的 Time per request,即对于单个用户而言,平均每个请求的处理时间。

这个表第一行表示有 50% 的请求都是在 2ms 内完成的,可以看到这个值是比较接近平均系统响应时间,以此类推。

Connection Times (ms)

Connection Times (ms)
              min  mean[+/-sd] median  max
Connect:        0    1  0.1      1      1
Processing:    1    1  0.2      1      2
Waiting:        1    1  0.2      1      2
Total:          1    2  0.2      2      2

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

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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4636字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中