ApacheBench学习文档

ApacheBench (ab) 总结

ApacheBench (ab) 测试工具的优点:

  1. 简单易用:ApacheBench 是一个轻量级、简单易用的性能测试工具,不需要复杂的配置和学习成本,适合快速进行简单的性能测试
  2. 快速验证:能够快速验证 Web 服务器的性能表现或代码更改对性能的影响,可以在短时间内执行测试并查看结果。
  3. 支持并发请求:支持通过 -c 参数指定并发请求数,可以模拟多用户同时访问服务器的情况,评估服务器的并发处理能力。
  4. 支持多种输出格式:支持输出不同格式的测试结果,包括文本、CSV 和 Gnuplot 文件,便于后续分析和可视化。

ApacheBench (ab) 测试工具的缺点:

  1. 功能有限:相比于其他性能测试工具如 JMeter,ApacheBench 功能较为有限,主要用于简单的 HTTP 压力测试,不支持复杂的测试场景和高级功能。
  2. 不适用于复杂场景:对于需要模拟复杂用户行为、进行功能测试或需要定制化配置的测试场景,ApacheBench 的能力有限,无法满足需求。
  3. 缺乏图形界面:ApacheBench 没有图形用户界面,所有操作都需要通过命令行完成,对于不熟悉命令行操作的用户来说可能不够友好。
  4. 无法模拟真实用户行为:ApacheBench 主要用于模拟并发请求,无法模拟真实用户的各种操作行为,例如页面浏览、点击等,因此无法完全评估应用程序的性能。
  5. 仅支持 HTTP 协议:ApacheBench 仅支持 HTTP 协议,无法测试其他类型的协议和应用,如 HTTPS、WebSocket 等。

结论:
ApacheBench 是一个简单、快速的性能测试工具,适用于简单的 HTTP 压力测试场景,它能够模拟多个并发的HTTP请求,以评估服务器的性能、稳定性,但在复杂的测试场景和高级功能需求方面存在一定的局限性
官网:ab - Apache HTTP 服务器基准测试工具 - Apache HTTP Server 版本 2.4

安装

Win安装:

首先,需要安装 Apache 服务器,下载地址:Apache VS17 binaries and modules download (apachelounge.com)
64位操作系统选择上面的一个压缩包,如下图所示
image.png
下载后解压,得到如下目录:
image.png
打开cmd命令,进入Apache Bench 的bin目录,启动 abs.exe ,如下图所示
image.png

Linux安装:
yum安装【不推荐】
yum -y install httpd-tools

测试安装是否成功:

ab -V

image.png

参数说明

用法:ab [选项] [http[s]://]hostname[:port]/path
选项包括:
    -n requests     执行的请求数量 【***】
    -c concurrency  同时进行的多个请求数量【并发】【***】
    -t timelimit    用于性能测试的最大时间(秒)【***】
                    这意味着 -n 默认为 50000
    -s timeout      每个响应的最大等待时间(秒)
                    默认为 30-b windowsize   TCP 发送/接收缓冲区的大小(字节)
    -B address      进行出站连接时要绑定的地址
    -p postfile     包含要 POST 的数据的文件。也要设置 -T 【***】
    -u putfile      包含要 PUT 的数据的文件。也要设置 -T
    -T content-type 用于 POST/PUT 数据的 Content-type 头,例如 【***】
                    'application/x-www-form-urlencoded'
                    默认为 'text/plain'
    -v verbosity    输出更详细的信息,包括每个请求的响应、连接状态、请求处理时间等 【***】
    -w              以 HTML 表格形式打印结果 【***】
    -i              使用 HEAD 而不是 GET,HEAD 方法不返回响应主体,只返回响应头信息
    -x attributes   作为表属性插入的字符串
    -y attributes   作为 tr 属性插入的字符串
    -z attributes   作为 td 或 th 属性插入的字符串
    -C attribute    添加 Cookie,例如 'Apache=1234'(可重复) 【***】
    -H attribute    添加任意的头行,例如 'Accept-Encoding: gzip' 
                    插入在所有正常头行之后(可重复)
    -A attribute    添加基本的 WWW 身份验证,属性 
                    是用冒号分隔的用户名和密码。
    -P attribute    添加基本的代理身份验证,属性
                    是用冒号分隔的用户名和密码。
    -X proxy:port   要使用的代理服务器和端口号
    -V              打印版本号并退出 
    -k              使用 HTTP KeepAlive 功能,即在同一个连接上执行多个请求 【***】
    -d              不显示响应百分比表格。
    -S              不显示置信估计和警告。
    -q              在执行超过 150 个请求时不显示进度
    -g filename     将收集的数据输出到 gnuplot 格式文件中。
    -e filename     输出百分比服务的 CSV 文件
    -r              在套接字接收错误时不退出。
    -h              显示使用信息(此消息)
    -Z ciphersuite  指定 SSL/TLS 密码套件(请参见 openssl ciphers)
    -f protocol     指定 SSL/TLS 协议
                    (SSL3、TLS1、TLS1.1、TLS1.2 或 ALL)

请求方法

1. GET请求:

get请求,请求100次,并发10

ab -n 100 -c 10 http://192.168.31.247:9999/notice/selectById/2

结果报告分析:

[root@localhost ~]# ab -n 100 -c 10 http://192.168.31.247:9999/notice/selectById/2
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 192.168.31.247 (be patient).....done  // 正在对 192.168.31.247 进行性能测试,测试已完成

Server Software:                        // 服务器软件类型
Server Hostname:        192.168.31.247  // 服务器主机名
Server Port:            9999  // 服务器端口号

Document Path:          /notice/selectById/2  // 请求路径
Document Length:        152 bytes  // 返回内容长度

Concurrency Level:      10  // 并发连接数 【**】
Time taken for tests:   0.078 seconds  // 测试总耗时
Complete requests:      100  // 完成的请求数量
Failed requests:        0  // 失败的请求数量
Write errors:           0  // 写入错误数
Total transferred:      25700 bytes  // 总传输字节数
HTML transferred:       15200 bytes  // HTML 内容传输字节数
Requests per second:    1282.68 [#/sec] (mean)  // 每秒完成的请求数【**】
Time per request:       7.796 [ms] (mean)  // 每个请求的平均响应时间 【**】
Time per request:       0.780 [ms] (mean, across all concurrent requests)  // 每个请求的平均处理时间(考虑到并发)
Transfer rate:          321.92 [Kbytes/sec] received  // 传输速率

Connection Times (ms)  // 连接时间统计 【**】
              min  mean[+/-sd] median   max
Connect:        1    1   0.6      1       4  // 连接时间的最小、平均、中位数、最大值
Processing:     3    6   4.1      4      21  // 处理时间的最小、平均、标准偏差、中位数、最大值
Waiting:        2    5   4.1      4      21  // 等待时间的最小、平均、标准偏差、中位数、最大值
Total:          3    7   4.1      6      22  // 总时间的最小、平均、标准偏差、中位数、最大值

Percentage of the requests served within a certain time(ms) //各时间段内完成请求的百分比【**】
  50%      6  // 50% 的请求在 6 毫秒内完成
  66%      7  
  75%      7  
  80%      8  
  90%     15  
  95%     20  
  98%     21  
  99%     22  
 100%     22 (longest request)  // 所有请求中最长的请求在 22 毫秒内完成

几个比较重要的参数:

  1. Concurrency Level:这个参数表示同时发起的并发连接数,它反映了测试中模拟的负载情况。并发连接数的增加可能会增加服务器负载,从而影响性能。
  2. **Requests per second **:这个指标表示系统在单位时间内可以处理的请求数量。它是评估系统吞吐量的关键指标,越高表示系统的处理能力越强大。
  3. Time per request:它表示每个请求的平均响应时间,包括服务器处理请求的时间以及网络传输时间。较低的响应时间通常意味着更快的性能。
  4. **Connection Times **:这个部分提供了连接时间的统计信息,包括连接建立时间、处理时间、等待时间等。它可以帮助识别潜在的性能瓶颈,例如连接建立时间过长或者处理时间过长等。
  5. **Percentage of the requests served within a certain time **:这个部分显示了在不同时间范围内完成请求的百分比。它可以帮助了解系统的响应时间分布情况,从而评估系统在不同负载条件下的性能表现。
其他

在 5 秒内尽可能多地发送请求,-n 默认为 50000

ab -t 5 http://192.168.31.247:9999/notice/selectById/2

-v 参数用于设置输出的详细程度。-v 参数后面可以跟一个数字,表示输出的详细程度级别

  • -v 0: 仅显示结果摘要。只输出每个请求的结果摘要,包括请求总数、成功数、失败数、总时间等,不显示任何调试信息。
  • -v 1: 显示请求结果摘要以及警告信息。输出每个请求的结果摘要,并在发生警告时显示警告信息。
  • -v 2: 显示请求结果摘要、警告信息以及调试信息。除了请求结果摘要和警告信息外,还会显示调试信息,例如连接信息、请求头信息等。
  • -v 3-v 4: 输出详细的调试信息。这个级别会输出更详细的调试信息,包括每个请求的完整信息、响应信息等
ab -n 10 -c 2 -v 4 http://192.168.31.247:9999/notice/selectById/2

将测试结果输出到.txt格式的文件中

ab -n 10 -c 2 http://192.168.31.247:9999/notice/selectById/2 > result.txt

将测试结果输出到.csv格式的文件中

ab -n 10 -c 2 -e result.csv http://192.168.31.247:9999/notice/selectById/2

将测试结果输出到.gp格式的文件中

ab -n 10 -c 2 -g result.gp http://192.168.31.247:9999/notice/selectById/2

结果文件:

[root@localhost ab]# cat result.gp 
starttime       seconds ctime   dtime   ttime   wait
Thu Mar 21 14:55:58 2024        1711004158      0       3       3       3
Thu Mar 21 14:55:58 2024        1711004158      0       3       4       3
Thu Mar 21 14:55:58 2024        1711004158      0       4       4       4
Thu Mar 21 14:55:58 2024        1711004158      1       4       5       4
Thu Mar 21 14:56:01 2024        1711004161      0       5       5       5
Thu Mar 21 14:55:58 2024        1711004158      1       7       8       7
Thu Mar 21 14:55:58 2024        1711004158      1004    7       1011    7
Thu Mar 21 14:55:59 2024        1711004159      3004    3       3007    3
Thu Mar 21 14:55:58 2024        1711004158      3008    4       3012    4
Thu Mar 21 14:56:01 2024        1711004161      7014    3       7018    3
  • starttime: 测试开始的时间戳。
  • seconds: 从测试开始到请求完成的时间(秒)。
  • ctime: 建立连接所花费的时间(毫秒)。
  • dtime: 完成 DNS 查询所花费的时间(毫秒)。
  • ttime: 完成请求到收到响应的时间(毫秒)。
  • wait: 服务器处理请求到发送响应的时间(毫秒)。

-w以 HTML 表格形式打印结果

ab -n 100 -c 10 -w http://192.168.31.247:9999/notice/selectById/2
2. POST请求

json参数(application/json)

ab -n 10 -c 5 -p post_data.txt -T "application/json" http://192.168.31.247:9999/notice/add

表单数据(application/x-www-form-urlencoded

ab -n 10 -c 5 -p form.txt -T application/x-www-form-urlencoded http://192.168.31.247:9999/test/form

表单数据(multipart/form-data),这种类型的参数用于在 HTTP 请求中传输复杂的表单数据,可以包含文件、文本等多种类型的数据

ab -n 2 -c 2 -p multipart_data.txt -T "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" http://192.168.31.247:9999/file/upload
3. HEAD请求:

HEAD 请求是 HTTP 协议中的一种请求方法,它类似于 GET 请求,但服务器只返回请求行和头部信息,而不返回实际的内容主体

ab -n 100 -c 10 -i http://192.168.31.247:9999/notice/selectById/2
4. PUT请求:

json参数(application/json)

ab -n 100 -c 10 -u put_data.txt -T application/json http://192.168.31.247:9999/notice/update
5. DELETE请求:
ab -n 1000 -c 10 -k -m DELETE http://192.168.31.247:9999/notice/delete/25

注意事项

  • 在进行测试时,遵守目标服务器的使用规定,避免对其造成不必要的负担。
  • 在测试时要确保网络连接稳定,避免因网络问题导致的测试结果不准确。
  • 在进行大规模测试时,要考虑服务器资源限制以及网络带宽的影响,避免因测试造成的服务器性能下降。

遇到的问题

1. 非法选项 -m

测试DELETE方法的时候,使用-m参数,指定请求方法,出现非法选项 -m 的错误
image.png
原因:
查阅官方文档,发现 -m参数,在 version >= 2.4.10 时才可用。
image.png
查看我的Apache Bench版本为2.3
image.png
解决办法
升级版本:从源代码安装
最新版本下载链接:Download - The Apache HTTP Server Project
image.png

#解压缩源代码:使用 gzip 解压缩 .tar.gz 文件
gzip -d httpd-2.4.58.tar.gz

#解压缩 .tar 文件
tar xvf httpd-2.4.58.tar

#进入解压缩后的Apache HTTP服务器源代码目录
cd httpd-2.4.58

#执行 configure 脚本以配置编译选项
./configure --prefix=/usr/local/apache2

#使用 make 命令进行编译
make

#执行 make install 命令,安装到指定的目录
make install

#编辑配置文件:通过编辑 Apache 配置文件来配置服务器。您可以使用 vi 或其他文本编辑器来编辑 /usr/local/apache2/conf/httpd.conf 文件,进行必要的配置更改,默认即可
vi /usr/local/apache2/conf/httpd.conf

#启动 Apache 服务器
/usr/local/apache2/bin/apachectl -k start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Cavan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值