Apache Bench简单使用
初识Apache Bench
Apache Bench 是 Apache 服务器的一个web压力测试工具,简称ab。ab也是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一个URL地址进行访问,因此可以用来测试目标服务器的负载压力。总体来说,ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标;但是缺点就是没有图形化结果,不能监控。
安装Apache Bench
要使用ab,首先要下载Apache服务器,从Apache官网首页可以找到下载的页面。我这里需要在Windows环境下进行ab的安装与使用。我个人亲测Apache Lounge可用,具体地址如下: Apache Lounge下载地址 。
Apache Lounge下载页面
进入页面之后,根据自己需要下载32位和64位版本。这里要注意的是,要正常运行Apache 2.4 的话,需要先安装最新版C++ Redistributable Visual Studio 2017组件,也可以在这个页面进行下载。组件安装完成之后,把下载好的Apache解压(最好解压在C盘根目录下,不然可能会出问题),会发现里面有个ReadMe的文档,一定要好好看一下,涉及到安装环境和注意事项。
ReadMe文档
这些步骤准备好了之后,就可以运行bin目录下的httpd.exe文件,but 在运行httpd.exe文件后,提示下面这个错误码,别慌,下面教你怎么解决。
AH00558: apache2: httpd: Could not reliably determine the server's fully qualified domain name, using xxx Set the 'ServerName' directive globally
这是因为未配置域名服务器或者域名服务器未能找到该域名的地址。
修改位置:安装目录中的Apache24/conf / 的文件httpd.conf
打开文件查找ServerName
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
根据自己的需求添加地址和端口号 比如可以添加本地地址
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
ServerName localhost
运行之后后台服务就启动了,这时候在浏览器中输入:http://localhost/,如果能够看到测试页面,就说明服务启动成功了。
Apache bench 使用
这时候我要开始使用Apache Bench的功能了,winwin+R,输入cmd, 在命令行下执行C:\Apache24\bin\ab.exe
,回车,备注:ab.exe这个文件目录,其实就是运行ab.exe这个文件
,跳转到bin目录下,运行ab.exe就能够看到提示信息了:
C:\Users\ql>C:\Apache24\bin\ab.exe
C:\Apache24\bin\ab.exe: wrong number of arguments
Usage: C:\Apache24\bin\ab.exe [options] [http://]hostname[:port]/path
## 用法:C:\ Apache24\bin\ab.exe[选项][http://]主机名[:端口]/path
选项:
Options are:
-n requests #执行的请求数,即一共发起多少请求。
-c concurrency #请求并发数。
-t timelimit #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-s timeout #指定每个请求的超时时间,默认是30秒。
-b windowsize #指定tcp窗口的大小,单位是字节。
-B address #指定在发起连接时绑定的ip地址是什么。
-p postfile #指定要POST的文件,同时要设置-T参数。
-u putfile #指定要PUT的文件,同时要设置-T参数。
-T content-type #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。
-v verbosity #设置详细模式等级。
-w #将结果输出到html的表中。
-i #使用HEAD方式代替GET发起请求。
-y attributes #以表格方式输出时,设置html表格tr属性。
-z attributes #以表格方式输出时,设置html表格th或td属性。
-C attribute #添加cookie,比如'Apache=1234'。(可重复)
-H attribute #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)
-A attribute #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
-P attribute #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-X proxy:port #指定代理服务器的IP和端口。
-V #打印版本信息。
-k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
-d #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
-q #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
-g filename #把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
-e filename #产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
-r #当收到错误时不要退出。
-h #输出帮助信息
-Z ciphersuite #指定SSL/TLS密码套件
-f protocol #指定SSL/TLS协议(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
这里可以注意到一个用法说明:Usage: ab.exe [options] [http://]hostname[:port]/path。也就是说,一定要在需要测试的url末尾加一个path,否则测试时会认为url非法。
模拟压测某个网站
这里我先尝试一下对百度首页进行一个请求总数为1000,本次请求并发数为500的测试,测试结果如下:
C:\Users\ql>C:\Apache24\bin\abs.exe -n 1000 -c 500 https://www.baidu.com/path
This is ApacheBench, Version 2.3 <$Revision: 1874286 $>
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)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Server Software: Apache # 平台前端服务器类型
Server Hostname: www.baidu.com # 服务器主机名
Server Port: 443 # 服务器端口
SSL/TLS Protocol: # SSL/TLS协议
Server Temp Key: # 服务器临时密钥
TLS Server Name: www.baidu.com # 服务器名称
Document Path: /path # 访问的路径
Document Length: 222 bytes # 返回数据大小
Concurrency Level: 500 # 并发数
Time taken for tests: 67.890 seconds # 整个测试持续的时间
Complete requests: 502 # 完成的请求数量
Failed requests: 0 # 表示失败的请求数,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。对于超时时间的设置可以用ab的-t参数。而如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算是失败的请求
Non-2xx responses: 503 #
Total transferred: 243452 bytes # 整个场景中的网络传输量,表示所有请求的响应数据长度总和,包括每个http响应数据的头信息和正文数据的长度。注意这里不包括http请求数据的长度,所以Total transferred代表了从Web服务器流向用户PC的应用层数据总长度。通过使用ab的-v参数即可查看详细的http头信息
HTML transferred: 111666 bytes # 整个场景中的HTML内容传输量,表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中http响应数据中头信息的长度
Requests per second: 7.39 [#/sec] (mean) # 每秒钟平均处理的请求数(相当于 LR 中的 每秒事务数)这便是我们重点关注的吞吐率,它等于:Complete requests / Time taken for tests
Time per request: 67620.001 [ms] (mean) # 每次并发请求时间(当前并发500)
Time per request: 135.240 [ms] (mean, across all concurrent requests) # 平均每个请求处理时间,所有并发的请求加一起
Transfer rate: 3.50 [Kbytes/sec] received # 平均每秒网络流量
Connection Times (ms)
min mean[+/-sd] median max
Connect: 26 4253 2144.6 5024 15452 # 连接
Processing: 31 13714 8087.7 12729 46074 # 处理
Waiting: 9 6795 6661.9 1055 45975 # 等待
Total: 6363 17967 8007.4 13257 61446 # 总量
Percentage of the requests served within a certain time (ms)
50% 13257 # 50%的用户响应时间小于13257毫秒
66% 24676 # 66%的用户响应时间小于24676毫秒
75% 25675 # 以此类推...
80% 25714
90% 28132
95% 28728
98% 29712
99% 29713
100% 61446 (longest request)
例子
# 模拟1个客户端请求100次:
$ ab -n 100 http://www.example.com/
# 模拟100个客户端请求10000次
$ ab -n 10000 -c 100 http://www.example.com/
# 调用POST方法的接口10次,传输的数据格式为JSON
$ ab -n 10 -p json-file http://www.example.com/
# 调用OPTIONS方法的接口10次
$ ab -n 10 -m OPTIONS http://www.example.com/
# 输出每次请求的返回信息
$ ab -n 10 -v 2 http://www.example.com/
普通网友: 你的博客内容深入浅出,总是让我不再感到学习的困难,每一篇博文都是我学习的宝库。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】
普通网友: 学到了,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】
普通网友: 大佬的文章写的太精辟了 让我深刻了解了这篇文章的精髓 谢谢大佬分享,希望继续创作优质博文。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】
亚索不会吹风: charles教程文章写的有点东西啊大佬,欢迎回访我的博客
Tsang_GeeChill: 我是在鼠标右键,为页面添加规则就自动生成这些选项的,不需要其它操作