在学习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。ab工具简介ab全称为:apache bench在官网上的解释如下:ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。其他网站解释:ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。下载ab工具Window官方下载地址:https://www.apachehaus.com/cgi-bin/download.plx下载完成后解压,修改解压根目录下的conf/httpd.conf文件的端口配置,默认是80端口,应该是被占用了,无法安装,可以自行修改为其他,我在这里修改为8088端口,然后输入命令安装:httpd -k install启动ab工具如果你需要在命令行的任意路径下可以输入ab测试,可以把bin目录路径加到环境变量的path中去,我是在bin目录下打开命令行的开始测试输入命令ab -n 100 -c 10 http://test.com/ 其中-n表示请求数,-c表示并发数其余命令请参见 http://apache.jz123.cn/programs/ab.htmlab参数说明有关 ab 命令的使用,我们可以通过帮助命令进行查看。如下:
[root@localhost bin]# ab --helpab: wrong number of argumentsUsage: ab [options] [http[s]://]hostname[:port]/pathOptions are: -n requests Number of requests to perform -c concurrency Number of multiple requests to make at a time -t timelimit Seconds to max. to spend on benchmarking This implies -n 50000 -s timeout Seconds to max. wait for each response Default is 30 seconds -b windowsize Size of TCP send/receive buffer, in bytes -B address Address to bind to when making outgoing connections -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 to use for POST/PUT data, 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. -q Do not show progress when doing more than 150 requests -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 (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
下面我们对这些参数,进行相关说明。如下:参数说明-n在测试会话中所执行的请求个数。默认时,仅执行一个请求。-c一次产生的请求个数。默认是一次一个。-t测试所进行的最大秒数。其内部隐含值是 -n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。-p包含了需要 POST 的数据的文件。-P对一个中转代理提供 BASIC 认证信任。用户名和密码由一个:隔开,并以 base64 编码形式发送。无论服务器是否需要(即, 是否发送了 401 认证需求代码),此字符串都会被发送。-TPOST数据所使用的 Content-type 头信息。-v设置显示信息的详细程度 -4 或更大值会显示头信息,3 或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。-V显示版本号并退出。-w以 HTML 表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。-i执行 HEAD 请求,而不是 GET。-X对请求使用代理服务器。-x设置 属性的字符串。-y设置-z设置属性的字符串。-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 中。其中的第一行为标题。-k启用 HTTP KeepAlive 功能,即在一个 HTTP 会话中执行多个请求。默认时,不启用 KeepAlive 功能。-q如果处理的请求数大于 150,ab 每处理大约 10% 或者 100 个请求时,会在 stderr 输出一个进度计数。此 -q 标记可以抑制这些信息。属性的字符串。测试结果分析上面的命令运行完毕后就出来测试报告了这段展示的是web服务器的信息,可以看到服务器采用的是nginx,域名是wan.bigertech.com,端口是80这段是关于请求的文档的相关信息,所在位置“/”,文档的大小为338436 bytes(此为http响应的正文长度)这段展示了压力测试的几个重要指标Concurrency Level: 100 ==>并发请求数Time taken for tests: 50.872 seconds ==>整个测试持续的时间Complete requests: 1000 ==>完成的请求数Failed requests: 0 ==>失败的请求数Total transferred: 13701482 bytes ==>整个场景中的网络传输量HTML transferred: 13197000 bytes ==>整个场景中的HTML内容传输量Requests per second: 19.66 [#/sec] (mean) ==>吞吐率,大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值Time per request: 5087.180 [ms] (mean) ==>用户平均请求等待时间,大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值Time per request: 50.872 [ms] (mean, across all concurrent requests) ==>服务器平均请求处理时间,大家最关心的指标之三Transfer rate: 263.02 [Kbytes/sec] received ==>平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题这段表示网络上消耗的时间的分解这段是每个请求处理时间的分布情况,50%的处理时间在4930ms内,66%的处理时间在5008ms内…,重要的是看90%的处理时间。关于登录的问题有时候进行压力测试需要用户登录,怎么办? 请参考以下步骤:先用账户和密码登录后,用开发者工具找到标识这个会话的Cookie值(Session ID)记下来如果只用到一个Cookie,那么只需键入命令: ab -n 100 -C key=value http://test.com/ 如果需要多个Cookie,就直接设Header: ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/总结总的来说ab工具ab小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。因此ab工具可以用作临时紧急任务和简单测试。同类型的压力测试工具还有:webbench、siege、http_load等开始测试如果你需要在命令行的任意路径下可以输入ab测试,可以把bin目录路径加到环境变量的path中去我是在bin目录下打开命令行的 注意,下面的是错误的,因为需要在域名后加上/path
ab -n 100 -c 10 http://www.baidu.com
报错信息如下:
ab: invalid URLUsage: ab [options] [http://]hostname[:port]/path
必须要接有path 所以我换一下测试命令:
ab -n 100 -c 10 http://www.baidu.com/s
-n 表示请求数,-c 表示并发数. s为path,表示指定测试地址,不指定可能会报”ab: invalid url” 错误. 另外还有-t 表示多少s内并发和请求测试出来的数据如下:
D:\apacheab\Apache24\bin>ab -n 100 -c 10 http://www.baidu.com/sThis is ApacheBench, Version 2.3 <$Revision: 1807734 $> 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).....doneServer Software: BWS/1.1 ##服务器软件和版本Server Hostname: www.baidu.com ##请求的地址/域名Server Port: 80 ##端口Document Path: /s ##请求的路径Document Length: 112435 bytes ##页面数据/返回的数据量Concurrency Level: 10 ##并发数Time taken for tests: 4.764 seconds ##共使用了多少时间 Complete requests: 100 ##请求数 Failed requests: 99 ##失败请求 百度为什么失败这么多,应该是百度做了防范 (Connect: 0, Receive: 0, Length: 99, Exceptions: 0)Total transferred: 11342771 bytes ##总共传输字节数,包含http的头信息等 HTML transferred: 11247622 bytes ##html字节数,实际的页面传递字节数 Requests per second: 20.99 [#/sec] (mean) ##每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量 Time per request: 476.427 [ms] (mean) ##用户平均请求等待时间 Time per request: 47.643 [ms] (mean, across all concurrent requests) ##服务器平均处理时间,也就是服务器吞吐量的倒数 Transfer rate: 2325.00 [Kbytes/sec] received ##每秒获取的数据长度Connection Times (ms) min mean[+/-sd] median maxConnect: 22 41 12.4 39 82##连接的最小时间,平均值,中值,最大值Processing: 113 386 211.1 330 1246##处理时间Waiting: 25 80 43.9 73 266##等待时间Total: 152 427 210.1 373 1283##合计时间Percentage of the requests served within a certain time (ms) 50% 373 ## 50%的请求在373ms内返回 66% 400 ## 60%的请求在400ms内返回 75% 426 80% 465 90% 761 95% 930 98% 1192 99% 1283 100% 1283 (longest request)
因为ab工具消耗小,所以有些人也用来进行ddos攻击,算一种ddos攻击工具[Linux]ApacheBench(ab)压力测试工具AB的简介ab是apachebench命令的缩写。ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等ab的原理ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机ab的安装安装命令:yum -y install httpd-tools 查看版本命令:ab -V 查看参数说明:ab --helpab的使用 常用方式:ab -c 500 -n 5000 http://localhost/
[root@H__D /]# ab -c 500 -n 5000 http://localhost/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 localhost (be patient)Completed 500 requestsCompleted 1000 requestsCompleted 1500 requestsCompleted 2000 requestsCompleted 2500 requestsCompleted 3000 requestsCompleted 3500 requestsCompleted 4000 requestsCompleted 4500 requestsCompleted 5000 requestsFinished 5000 requestsServer Software: nginx/1.15.3 #测试服务器的名字Server Hostname: localhost #请求的URL主机名Server Port: 80 #请求端口Document Path: / #请求路径Document Length: 613 bytes #HTTP响应数据的正文长度Concurrency Level: 500 #并发用户数,这是我们设置的参数之一Time taken for tests: 0.407 seconds #所有这些请求被处理完成所花费的总时间 单位秒Complete requests: 5000 #总请求数量,这是我们设置的参数之一Failed requests: 0 #表示失败的请求数量Write errors: 0 Total transferred: 4230000 bytes #所有请求的响应数据长度总和。包括每个HTTP响应数据的头信息和正文数据的长度HTML transferred: 3065000 bytes #所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度Requests per second: 12284.44 [#/sec] (mean) #吞吐量,计算公式:Complete requests/Time taken for tests 总请求数/处理完成这些请求数所花费的时间Time per request: 40.702 [ms] (mean) #用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数) Time per request: 0.081 [ms] (mean, across all concurrent requests) #服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency LevelTransfer rate: 10149.06 [Kbytes/sec] received。 #表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。Connection Times (ms) min mean[+/-sd] median maxConnect: 0 2 0.8 1 6Processing: 3 5 7.9 5 399Waiting: 0 4 7.9 4 399Total: 4 7 8.0 7 404WARNING: The median and mean for the initial connection time are not within a normal deviation These results are probably not that reliable.Percentage of the requests served within a certain time (ms) 50% 7 #50%用户请求在7ms内返回 66% 7 #60%用户请求在7ms内返回 75% 7 80% 7 90% 7 95% 7 98% 12 #98%用户请求在12ms内返回 99% 12 100% 404 (longest request)
使用注意1、MAC中应该是自带了Apache。2、在使用ab命令时,并发了过高会出现错误:Too many open files,由于系统打开文件数量限制了。查看系统打开文件数量,命令:ulimit -a修改打开文件数量,修改成1024,命令:ulimit -n 1024查看修改后情况,命令:ulimit -n参考:https://www.cnblogs.com/behindman/p/8700611.html https://blog.csdn.net/qq_26525215/article/details/79182674 https://www.cnblogs.com/h–d/p/9903959.html https://www.jianshu.com/p/d222b7c80e97
0 评论