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下载页面

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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值