当前位置 : 首页 » 文章分类 :  测试  »  接口性能测试工具-ab

接口性能测试工具-ab

       ab是一款非常简单易用的接口性能测试工具。本文简介了ab的原理,安装以及简单使用。

1. ab的原理

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

       ab命令对发出负载的计算机要求很低,他既不会占用很高的cpu,也不会占用很高的内存。但却会给目标服务器造成巨大的负载,其原理类似cc攻击。自己测试也需要注意,避免导致死机。

2. ab的安装

       centos通过yum安装

[root@ArcVideo webbench-1.5]# yum -y install httpd-tools
which ab
/usr/bin/ab
[root@ArcVideo webbench-1.5]# ab -V
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

3. ab参数说明

[root@ArcVideo webbench-1.5]# ab –help
ab: wrong number of arguments
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
-n requests Number of requests to perform
在测试会话中所执行的请求个数。默认时,仅执行一个请求。
-c concurrency Number of multiple requests to make
一次产生的请求个数。默认是一次一个。
-t timelimit Seconds to max. wait for responses
测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-b windowsize Size of TCP send/receive buffer, in bytes
-p postfile File containing data to POST. Remember also to set -T
-u putfile File containing data to PUT. Remember also to set -T
-T content-type Content-type header for POSTing, eg.
‘application/x-www-form-urlencoded’
Default is ‘text/plain’
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. ‘Apache=1234. (repeatable)
-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don’t exit on socket receive errors.
-h Display usage information (this message)
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)

4. ab性能指标

吞吐率

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

吞吐率是基于并发用户数的:a.吞吐率和并发用户数相关 b.不同的并发用户数下,吞吐率一般是不同的

       计算公式:总请求数/处理完成这些请求数所花费的时间,即 Request per second = Complete requests / Time taken for tests, 这个值越大表示当前机器的整体性能越好。

并发连接数

       并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。

并发用户数

       一个用户可能同时会产生多个会话。在Http1.1下,浏览器的并发请求数有限制,并发用户数等于并发连接数除以浏览器的并发请求数。

[测试你的浏览器并发数]工具(http://developer.oncecode.com/comet/)

用户平均请求等待时间

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

服务器平均请求等待时间

       计算公式: 处理完成所有请求数所花费的时间/总请求数,即:Time taken for/testsComplete requests

5. ab实际使用

       ab的命令参数比较多,我们经常使用的是-c和-n参数。 -n是总请求数,-c是并发连接数,每秒发起的请求数,如果是测试接口,就可以理解为并发用户数。 -c值不同,吞吐量等值都会不同,测试的结果就不一样。

ab -n 100000 -c 200 http://172.17.230.131:8080/server/v2/acquisition/recordH5FlashContent

Software: Apache-Coyote/1.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Server Hostname: 172.17.230.131
Server Port: 8080
Document Path: /server/v2/acquisition/recordH5FlashContent
Document Length: 5 bytes
Concurrency Level: 200
Time taken for tests: 26.199 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 15300000 bytes
HTML transferred: 500000 bytes
Requests per second: 3816.92 [#/sec] (mean)
Time per request: 52.398 [ms] (mean)
Time per request: 0.262 [ms] (mean, across all concurrent requests)
Transfer rate: 570.30 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 18.7 0 1000
Processing: 0 52 55.6 33 229
Waiting: 0 52 55.6 33 229
Total: 0 52 58.5 33 1036
Percentage of the requests served within a certain time (ms)
50% 33
66% 54
75% 82
80% 102
90% 147
95% 173
98% 190
99% 197
100% 1036 (longest request)

6. 可能遇到的问题

问题一、socket: Too many open files (24)

解决(在测试服务器操作):

1、查看当前系统设置:open files (-n) 1024为1024
[root@localhost ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7844
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 1024
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

2、修改默认值:
临时生效:
[root@localhost ~]# ulimit -n 65536
永久生效:
/etc/security/limits.conf文件中添加以下两行后重新登陆

  • soft nofile 65536
  • hard nofile 65536

3、查看修改结果
[root@localhost ~]# ulimit -n
65536

问题二、

       ab实际执行的请求如果只有一部分,说明我们的系统达不到那么大的并发量,降低-c的值就可以了,或者把一个请求分到多个命令中执行。

问题三、

       ab的-c选项的参数最大到20000,如果想再大,只能修改源码再安装

问题四、

       -c选项的参数不能大于-n的参数

问题五、

       ab命令需要在其它服务器执行,本地执行会忽略服务器通信的时间。

7. 小结

       做为一个java后台开发人员,可以使用ab做接口性能测试工具,完全够了。webbench也可以用来做测试,基本差不多。如果要做复杂的专业的测试,例如需要测试并发用户测试,或者是需要用上次接口的结果来做输入测试一个完整的流程,或者想要得到更直观图表啊更详细的结果,最好还是用loadRunner或其他更专业的工具。

上一篇 linux命令 which

下一篇 大数据环境搭建-elasticsearch