一、Apache Benchmark (ab)简介
Apache Bench 是一个简约但功能强大的命令行工具,设计用于执行基准测试。它可以对服务器进行压力测试,以测量服务器能够承受的最大请求数量,以及服务器在特定请求数量下的响应时间。Apache Bench 是 Apache HTTP Server 项目的一部分,但它可用于测试任何 Web 服务器。
二、安装
Apache Benchmark(简称AB)是一个命令行工具,用于对服务器进行压力测试。以下是AB在不同操作系统上的安装过程:
1、Linux系统下的安装
在Linux系统中,Apache Bench通常包含在httpd-tools软件包中。以Ubuntu为例,可以使用以下命令安装:
sudo apt-get update sudo apt-get install apache2-utils
安装完成后,可以通过输入ab -V来验证Apache Bench是否成功安装,以及查看当前的版本信息。
2、Windows系统下的安装
benchmark是C语言编写的软件,所以windows如果想使用,一种方式是自己搭建编译环境,然后编译。另外一种方式直接使用编译好的软件,下面的链接是官问提供的编译好的下载页面https://www.apachelounge.com/download/#google_vignette



三、使用说明
1、语法
ab [ -Aauth-username:password ] [ -bwindowsize ] [ -Blocal-address ] [ -cconcurrency ] [ -Ccookie-name=value ] [ -d ] [ -ecsv-file ] [ -fprotocol ] [ -ggnuplot-file ] [ -h ] [ -Hcustom-header ] [ -i ] [ -k ] [ -l ] [ -mHTTP-method ] [ -nrequests ] [ -pPOST-file ] [ -Pproxy-auth-username:password ] [ -q ] [ -r ] [ -stimeout ] [ -S ] [ -ttimelimit ] [ -Tcontent-type ] [ -uPUT-file ] [ -vverbosity] [ -V ] [ -w ] [ -x<table>-attributes ] [ -Xproxy[:port] ] [ -y<tr>-attributes ] [ -z<td>-attributes ] [ -Zciphersuite ] [http[s]://]hostname[:port]/path
2、参数详解
-c concurrency 请求并发数,默认为1; -n requests 请求总数; -A auth-username:password 向服务器提供基本认证信息。用户名和密码之间有一个“:”隔开,并将以base64编码形式发送,无论服务器是否需要(即是否发送了401认证需求代码),此字符串都会被发送。 -b windowsize Size of TCP send/receive buffer, in bytes. -B local-address Address to bind to when making outgoing connections -C cookie-name=value 对请求附加一个“Cookie:”头行。其典型形式是:name=value的一个参数对。此参数可以重复。 -d 不显示“percentage served within XX[ms] table”消息(为以前版本提供支持) -e csv-file 产生一个逗号分隔(CSV)文件,其中包含了处理每个相应百分比请求(从1%到100%)所需要的相应百分比时间(以微妙为单位)。由于这种格式已经“二进制化”。所以比“gnuplot”格式更有用。 -f protocol 指定SSL/TLS procotol() -g gnuplot-file 把所有测试结果写入一个“gnuplot”或者TSV(以TAB分隔)文件。此文件可以方便地导入Gnuplot,IDL,Mathematica,Excel中。其中的第一行为标题。 -h 显示使用方法的帮助信息 -H custom-header 对请求附加额外的头信息,此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值(如:”Accept-Encoding:zip/zop;8bit“). -i 执行HEAD请求,而不是GET请求 -k 启用Keepalive功能,即在一个HTTP会话中执行多个请求。默认不启用此功能 -p POST-file 包含了POST数据的文件 -P proxy-auth-username:password 对一个中转代理提供基本认证信息。用户名和密码用”:“隔开,并将以base64编码形式发送。无论服务器是否需要(即是否发送了407代理认证需求代码)此字符串都会被发送。 -q 如果代理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数、此-q标记可以屏蔽这些信息。 -r 在socket接收错误时不退出 -s 用于编译中使用了SSL的受保护的https,而不是http协议的时候。此功能是实验性的,最好不要用。 -S 不显示中值和标准偏差值,而且在均值和中值为标准偏差值得1-2倍时,也不显示警告和出错信息。默认时,会显示最小值/均值/最大值等数值 -t timelimit 测试所进行的最大秒数。内部隐含值是”-n 50000“。它可以时对服务器的测试限制在一个固定的总时间以内。默认时:没有时间限制。 -T content-type POST数据时所使用的”Content-type“头信息 -u PUT-file File containing data to PUT. Remember to also set -T -v verbosity 设置显示信息的详细程度,4或更大值会显示头信息,3或更大值可以显示响应代码(404,200等),2或更大值可以显示警告和其他信息。 -V 显示版本号并退出 -w 以HTML表格信息输出结果,默认时,它是白色背景的两列宽度的一张表 -x <table>-attributes 设置<table>属性的字符串。此属性被填入<table 这里> -X proxy[:port] 对请求使用代理服务器 -y <tr>-attributes 设置<tr>属性的字符串 -z <td>-attributes 设置<td>属性的字符串 -Z ciphersuite 指定SSL/TLS密码套件(见openssl密码)
3、返回值分析
C:\Users\one_t>ab -n20 -c20 http://www.baidu.com/ This is ApacheBench, Version 2.3 <$Revision: 1826891 $> 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).....done Server Software: BWS/1.1 //服务器版本 Server Hostname: www.baidu.com //服务器地址 Server Port: 80//服务器端口 Document Path: / //子路径 Document Length: 118311 bytes //传输数据大小 Concurrency Level: 20 //请求并发量 Time taken for tests: 3.966 seconds //持续时间 Complete requests: 20 //总请求数 Failed requests: 19 //失败的请求 (Connect: 0, Receive: 0, Length: 19, Exceptions: 0) Total transferred: 2384271 bytes //总传输量 HTML transferred: 2365331 bytes //响应正文传输量,减去了Total transferred中HTTP响应数据中的头信息的长度 Requests per second: 5.04 [#/sec] (mean) //吞吐率,每秒请求数(相当于LR中的每秒事务数TPS),mean表示为平均值:526.29/sec。计算公式:Complete requests / Time taken for tests Time per request: 3966.402 [ms] (mean) //请求所消耗的总时间,计算公式:Time token for tests/(Complete requests/Concurrency Level) Time per request: 198.320 [ms] (mean, across all concurrent requests) //平均请求时间 Transfer rate: 587.03 [Kbytes/sec] received //表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests Connection Times (ms) //消耗时间分解 min mean[+/-sd] median max Connect: 8 11 2.1 10 17 Processing: 1086 2207 699.3 2028 3845 Waiting: 12 410 290.8 339 1104 Total: 1096 2218 699.2 2038 3856 Percentage of the requests served within a certain time (ms) //响应时间正态分布 50% 2038 66% 2377 75% 2880 80% 3067 90% 3166 95% 3856 98% 3856 99% 3856 100% 3856 (longest request)
四、使用案例
1、基本性能测试
案例描述:
假设您想要测试一个网站在接收到1000个请求时的性能表现。
ab -n 1000 -c 10 http://www.example.com/
在这个例子中,-n 参数表示总共发送的请求数,而 -c 参数表示并发请求的数量。这个测试将模拟10个用户同时向目标URL发送请求,直到完成1000次请求为止。
结果分析:
测试完成后,AB会输出一份报告,包括每个请求的平均响应时间、最小和最大响应时间、请求速率等。这些数据可以帮助您了解服务器在特定负载下的表现。
2、模拟高并发访问
案例描述:
您想要测试服务器能够承受的最大并发访问量。
ab -n 10000 -c 500 http://www.example.com/
这里,我们将并发请求数提高到500,以模拟大量用户同时访问的情况。
结果分析:
通过观察服务器在不同并发级别下的响应时间和吞吐量,可以评估其在高负载情况下的性能和稳定性。
3、POST数据测试
案例描述:
(1)测试服务器处理POST请求的能力。
使用方法:
首先,创建一个包含POST数据的文件,例如postdata.txt:
username=testuser&password=testpass
然后,运行AB并使用-p参数指定POST文件:
ab -n 100 -c 10 -p postdata.txt http://www.example.com/login
如果是上传接口请求体是JSON格式:post_data.json
{"title": "测试标题", "content": "这里是上传的内容", "file": "base64编码或文件路径"}# 测试提交JSON数据的POST接口 ab -n 1000 -c 100 \ -T "application/json" \ -p post_data.json \ http://your-website.com/api/upload # 测试提交表单的POST接口 ab -n 1000 -c 100 \ -T "application/x-www-form-urlencoded" \ -p post_data.txt \ http://your-website.com/api/form_submit
结果分析:
此测试将帮助评估服务器如何处理带有POST数据的请求,这在Web应用程序中是常见的情况。
4、持续压力测试
案例描述:
您想要持续地对服务器进行压力测试,以观察其长期运行的性能。
ab -t 60 -c 10 http://www.example.com/
这里的-t参数表示测试将持续60秒。
结果分析:
长时间运行测试可以帮助发现在持续负载下可能出现的性能瓶颈或内存泄漏等问题。
5、自定义HTTP头测试
案例描述:
测试服务器对自定义HTTP头的响应。
ab -n 100 -c 10 -H "User-Agent: ApacheBench/2.3" http://www.example.com/
使用-H参数可以添加自定义的HTTP头。
结果分析:
通过自定义HTTP头,可以模拟不同用户代理的请求,这对于测试服务器对不同浏览器的兼容性非常有用。
五、总结
Apache Bench 是一款轻量级的性能测试工具,适用于快速简单的负载测试。尽管它没有图形化界面或复杂的配置选项,但它在评估Web服务器性能方面非常有效。
- 本文固定链接: https://www.ttfde.top/index.php/post/451.html
- 转载请注明: admin 于 TTF的家园 发表
《本文》有 0 条评论