压测工具ApacheBench的入门教程

ApacheBench

ApacheBench

是一个指令列程式,专门用来执行网站服务器的运行效能,特别是针对Apache 网站服务器。这原本是用来检测 Apache 网站服务器能够提供的效能,特别是可以看出Apache能提供每秒能送出多少网页。

ApacheBench( ab )工具程式是标准 Apache 网站服务器发布的一部分,跟 Apache 网站服务器一样,也是免费软件,并可以用 Apache许可证 的规范下散布此软件。

Apache Bench命令原理:

ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighttpd、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。

Apache Bench相关使用说明:

Apache HTTP Server 网站下载最新版,如果你要在 Windows 的环境执行 ApacheBench 可以直接下载 Win32 Binary 的版本就好,由于在线所提供的版本是 MSI 的封装档,安装好之后也等同于在你的计算机内安装了一套 Apache HTTP Server,如果你不需要多执行一套 Apache HTTP Server 的话,你可以在安装好之后进入 C:\Program Files\Apache Group\Apache2\bin 目录,找到 ab.exe 执行档,复制出来后再移除 Apache 安装即可,因为 ab.exe 是可以独立执行的,不需要任何关连的 dll 。

ApacheBeach使用

Usage: ab [options] [http[s]://]hostname[:port]/path
用法:ab [选项] 地址

选项:
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)

模拟压测某个网站首页

[root@localhost ~]# ab -n 500 -c 10 http://gitee.com/
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 gitee.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Finished 500 requests


Server Software:        nginx           # 平台前端服务器类型
Server Hostname:        gitee.com       # 服务器主机名
Server Port:            80              # 服务器端口

Document Path:          /               # 访问的路径
Document Length:        178 bytes       # 返回数据大小

Concurrency Level:      10              # 并发数
Time taken for tests:   3.898 seconds   # 整个测试持续的时间
Complete requests:      500             # 完成的请求数量
Failed requests:        0               # 表示失败的请求数,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。对于超时时间的设置可以用ab的-t参数。而如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算是失败的请求
Write errors:           0               # 输出错误数量
Non-2xx responses:      500             # 
Total transferred:      217500 bytes    # 整个场景中的网络传输量,表示所有请求的响应数据长度总和,包括每个http响应数据的头信息和正文数据的长度。注意这里不包括http请求数据的长度,所以Total transferred代表了从Web服务器流向用户PC的应用层数据总长度。通过使用ab的-v参数即可查看详细的http头信息
HTML transferred:       89000 bytes     # 整个场景中的HTML内容传输量,表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中http响应数据中头信息的长度
Requests per second:    128.26 [#/sec] (mean) # 每秒钟平均处理的请求数(相当于 LR 中的 每秒事务数)这便是我们重点关注的吞吐率,它等于:Complete requests / Time taken for tests
Time per request:       77.964 [ms] (mean)  # 每次并发请求时间(当前并发10)
Time per request:       7.796 [ms] (mean, across all concurrent requests) # 平均每个请求处理时间,所有并发的请求加一起
Transfer rate:          54.49 [Kbytes/sec] received # 平均每秒网络流量

# 花费在连接Connect,处理Processing,等待Waiting的时间的最小min,平均值mean,标准差[+/-sd],中值median,最大表max的一个表。

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       23   27   1.3     27      30     # 连接
Processing:    36   49   7.8     50     155     # 处理
Waiting:       35   48   7.8     50     154     # 等待
Total:         61   75   8.0     76     180     # 总量

# 在一定比例的请求服务时间
Percentage of the requests served within a certain time (ms)
  50%     76        # 50%的用户响应时间小于76毫秒
  66%     79        # 66%的用户响应时间小于79毫秒
  75%     80        # 以此类推...
  80%     81
  90%     83
  95%     85
  98%     87
  99%     89
 100%    180 (longest request)
[root@localhost ~]# 

例子

# 模拟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/

注意事项

  • 使用-H Content-Type 不能代替-T Content-Type指定Content-Type 头部

  • 如果提示ab: invalid URL,可能是URL最右边缺少/,例如http://www.example.com需要改为http://www.example.com/。

  • 需要注意如果压测的HTTP接口是通过返回结果判断是否成功(只要能响应都会返回200状态码),则需要自行去想办法识别失败的请求

  • ab属于一个轻量级的压测工具,结果不会特别准确,可以用作参考。
    追求准确的话,推荐使用jmeter或者LoadRunner。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值