w3ctech

分享ApacheBench(ab)

接坑关联文章RPS

测试环境概要

本次测试基于以下环境:

  • ApacheBench(v2.3)
  • Mac OS X 10.10.5
  • 2.7 GHz Intel Core i5
  • Memory 8GB

内容概要

该文主要收集ab test的各项参数的具体含义并举例介绍ab test的基本使用方法.

关于ApacheBench(以下简称ab)

官方释义如下: ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server 简单来说就是一款压力测试工具, 可以通过创建多线程模拟多用户同时请求服务器行为, 从而实现对目标服务器进行压力测试的目标.对https://github.com网站模拟压力测试的效果图如下: ab test

ab参数详解

联系上图对ab测试的各项参数进行阐述:

Server Software

被测Web服务器软件名称, 它来自http响应数据的头信息.

Server Hostname

请求的URL中的主机部分名称,它来自http请求数据的头信息.

Server port

被测Web服务器软件的监听端口.

SSL/TLS Protocol

客户端与服务器端的协商头信息, 仅当使用了SSL协议时才会打印此信息, 例如此处测试的Github网站采用的是https协议, 使用了SSL协议, 因此ab打印出了此信息.

Document Path

请求URL中的根绝对路径, 此处为/.

Document Length

首次响应数据的正文长度, 单位为字节.

Concurrency Level

并发用户数, 命令中表现为-c后面跟着的参数.

Time taken for tests

所有请求的总耗时, 总请求表现为-n后面的参数, 从首个socket被创建至接受到最后一个响应的耗时.

Complete requests

总请求数, 与命令中-n后面的参数一致.

Failed requests

失败的请求数,失败指的是连接服务器、发送数据、接收数据等环节发生异常, 以及无响应后超时的情况.如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为Non-2xx responses的统计项,用于统计这部分请求数, 这些请求并不算是失败的请求.

Total body sent

如果请求为POST类型带有请求体此处才会打印出来, 表示带数据发送请求.

HTML transferred

所有请求的响应数据长度总和, 包括每个http响应数据的头信息和正文数据的长度(不包括http请求数据的长度).

HTML transferred

所有请求的响应数据中正文数据的总和, 即不包括响应数据中头信息的长度.

Request per second

这里相当于服务器每秒所能接受的请求数即吞吐率, 可通过公式计算Complete requests / Time taken for tests, 如对上图中的结果计算10 / 10.497 ≈ 0.95, 后面的计算结果都是四舍五入近似值, (mean)表示这是一个平均值. 为了测试随着请求数的增加该值会出现怎样的变化, 特地写了段程序分析点击看代码 查看疑问.

Time per request

第一个TPR表示用户平均请求等待时间, 可通过公式计算Time taken for tests / (Complete requests /Concurrency Level), 如对上图中的结果计算10.497 / 10 / 2 ≈ 2099.4(这里是近似值).

Time per request

第二个TPR表示服务器平均处理每一个并发请求的时间, 可通过公式计算Time per request / Concurrency Level, 如果对上图中的结果计算2099.4 / 2 ≈ 1049.7(这里是近似值).

Transfer rate

请求在单位时间内从服务器获取的数据长度, 可通过公式计算Total transferred / Time taken for tests, 如对上图对结果计算计算273337(byte) / 10.497 ≈ 26039.5351 / 1024(kb) ≈ 25.43kb/s, 从这里也可以看出大致的带宽需求.

Connection Times(ms)

此处对ConnectProcessingWaitingTotal进行解释. Connect表示网络延时加上与远程服务器建立连接所耗费的时间, Processing表示第一个字节发出去至接受到第一个响应字节之间所耗费的时间, 这里大致可以推断出服务器的处理能力、Waiting表示最后一个字节发送完至接受到第一个字节到响应时间间隔、Total表示从建立连接开始至接受到第一个字节响应的总时间, 是ConnectProcessing的时间总和, 当然此处不能单纯根据上图的结果去加, 因为图中表示的是均值.

Percentage of the requests served within a certain time (ms)

这里表示请求处理时间的分布与上面Time per request对应, 从图中可以看到50%的处理时间小于1535ms, 根据Connection Times可以看到最长的处理时间为6394ms, 最短处理时间为1306ms.

使用gnuplot工具可以直观的根据图标分析

使用-g参数结合gnuplot可以从图标中更加直观的看到分析结果, 如下图为一个简单的ab测试后使用gnuplot生成的图: ab-gnuplot

基本的使用示例

以下介绍几个基本的使用场景, 更多ab参数请点击参考链接查看官网介绍.

模拟GET请求-n1000

ab -n1000 http://www.example.com/

模拟POST请求-n1000

此处在当前文件夹下面需要准备p.json文件, 文件内容为json格式的key/value对: ab -n1000 -p p.json -T application/json http://www.example.com/

模拟并发-n1000 -c20(c <= n)

并发数不能大于总请求数: ab -n1000 -c20 http://www.example.com/

查看返回头信息-n1000 -v 3(-v 可选2、3、4)

ab -n1000 -v 2 http://www.example.com/

图标展示结果-n1000 -g g.tsv

生成gnuplot生成分析图所需要的数据文件: ab -n1000 -g g.tsv http://www.example.com/

参考链接

主要参考链接如下: Apache httpd(v2.4) 各项参数含义 Connection Times 关于gnuplot

原文链接

w3ctech微信

扫码关注w3ctech微信公众号

共收到0条回复