ab 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求。

安装apache之后,在bin目录下有ab.exe这个工具。

ab工具使用官方文档:http://httpd.apache.org/docs/2.2/programs/ab.html

我们要运行的第一个基准测试是在www.example.com域上的简单测试。这个基本测试的主要目的就是要让你熟悉以下工具的语法,查看所有的可用选项以及查看完整的响应。

所有ab命令的组成遵循此结构:

  1. ab [options] [full path to web document]

我们将使用ab语法模拟单个请求。打开命令/shell终端并键入以下命令:

  1. ab -n 1 http://www.example.com/  (后面的/不能漏掉,否则我会显示invalid url)

这条命令只使用了option部分的一个选项,即n,它表示要在指定的URL上执行的请求数。在这个示例中,ab只请求Web文档一次,但n的值可以是小于50 000的任意数字。默认情况下,n设置为1。

该命令的下一部分是URL部分。对于刚刚执行的ab命令,URL为http://www.example. com/。如果选择测试此域中的某个文档,如test.php(并不存在),则要测试的URL将为http://www.example.com/test.php

让我们回到用于执行ab命令的命令/shell终端。到现在为止,你已经执行了这个命令,并且屏幕上满是ab工具所返回的数字和常规数据。你的输出应该类似于图1-4。

图1-4中的数据分为4个主要部分,如图1-5所示。

1. 服务器信息

服务器信息部分包含Web服务器运行的软件。在我们的示例中,软件为Apache 2.2.3。数据包含在第一个字段即Server Software中。该字段的值可能会因为网站所使用的Web服务器软件而存在差异。由于Web管理员使用的安全措施,该字段的值也可能会返回一些你不熟悉的内容。

下面两个字段(即Server Hostname和Server Port)含有我们在其上运行模拟的主机名和Web服务器侦听的端口号。

2. 脚本信息

ab响应的第二部分包含有关运行模拟的Web文档的信息。Document Path包含请求的文档,而Document Length则包含所有HTML、图像、CSS、JS以及响应中任何内容的字节数总和。

3. 连接信息

连接信息部分包含信息的主体。它回答了诸如"请求收到响应需要多长时间?"、"返回了多少数据?"之类的问题,最重要的是它回答了"处理文档时Web服务器可以支持多少用户?"。

表1-2提供了此部分数据的完整列表和描述。现在,让我们看一看突出显示的行,这些行包含我们最关心的字段。

表1-2 ab响应描述

字段

描述

示 例 值

Concurrency Level

所进行的并发请求总数

1,2,3,…,n

其中n为任意数字

Time taken for tests

运行所花费的总时间

000.000秒

Complete requests

模拟的请求总数中已

完成的请求总数

1,2,3,…,n

其中n为任意数字

(续)

字段

描述

示 例 值

Failed requests

模拟的请求总数

中失败的请求总数

1,2,3, …,n

其中n为任意数字

Write errors

使用写入数据时

遇到的错误总数

1,2,3, …,n

其中n为任意数字

Non-2×× responses

未收到HTTP成功

响应的请求总数(200)

1,2,3,…,n

其中n为任意数字

Total transferred

整个模拟的响应中

传输的总数据,

大小包括标头数据

725个字节

HTML transferred

整个模拟传输的内容

正文的总大小

137 199个字节

Requests per second

每秒支持的请求总数

5.68 [#/秒]

(平均值)

Time per request

满足一个请求需要

花费的总时间

176.179毫秒

Time per request

满足所有并发请求

中的一个请求需要

花费的总时间

176.179毫秒

Transfer rate

每秒收到的字节总数(KB)

766.27 [KB/秒]

HTML transferred、Requests per second以及Time per request都是关键字段。这些字段使我们能够大概了解Web服务器为一个请求返回的数据量、Web服务器一秒可以处理的请求总数以及一个请求成功地收到来自Web服务器的响应所花费的总时间。

在本书中,我们的目标是成功降低HTML transferred,提高Requests per second并且降低Time per request值。

4. 连接指标细目分类

最后一个部分包含一个表,其中包含Connect、Processing、Waiting以及Total字段。这些字段告诉我们请求在每个过程状态中所需的时间。我们最感兴趣的是Total字段及其最大、最小值列。这两列提供响应一个请求所需花费的最长和最短时间的数据。下面让我们看看ab为我们提供的可选标记。

1.4.4 ab选项标记

ab包含大量有用的可选标记。使用这些标记,可以将为HTML表格格式化响应、设置cookie、设置基本身份验证信息以及设置内容类型,另外还有其他选项。表1-3显示了可选标记的完整列表。

表1-3 可选标记

标记

描述

-A

<username>:<password>

用于提供服务器身份验证信息。

用户名和密码用“:”分隔。

发送的字符串采用base64编码

-c <concurrency 

number>      

一次模拟的请求数。默认情

况下设置为1。数量不得大于n

-C cookie-name=value

可重复的标记,包含cookie信息

-d

隐藏“percentage served

within XX[ms] table”

(续)

标记

描述

-e

要创建的.csv文件的路径。该文件包

含运行的基准测试的结果,该结果分为

两列,即Percentage和Time in ms。建议

采用“gnuplot”文件

-g

要创建的“gnuplot”或TSV文件的路径。

基准测试的输出将保存到该文件中

-h

显示要用于ab的选项列表

-H custom-header

采用字段值对形式发送有效标头和请求

-i

执行HEAD请求,而不是默认的GET请求

-k

启用Keep-Alive功能。允许通过一个

HTTP会话满足多个请求。默认情况下,

该功能处于禁用状态

-n requests

要执行的请求总数

-p POST-file

包含用于HTTP POST请求的数据的

文件路径。内容应该包含由&分隔的键=值对

-P username:password

采用Base64编码的字符串。字符串包含

基本身份验证,以及由“:”分隔的用户名和密码

-q

执行多于100个请求时隐藏进度输出

-s

使用https协议,而非默认的http协议

——不建议这样做

-S

隐藏中位数和标准偏差值

-t timelimit

指定了这个值以后,基准测试的时间

不会超过指定的值。默认情况下无时间限制

-v verbosity-level

数值为2及以上将打印警告和信息;

为3将打印HTTP响应代码;4及以

上将打印标头信息

-V

显示ab工具的版本号

-w

采用HTML表格打印结果

-x <table-attributes>

表示HTML属性的字符串,

使用–w时将放置在<table>标记中

-X proxy[:port]

指定要使用的代理服务器。

代理端口是可选的

-y <tr-attributes>

表示HTML属性的字符串,

使用–w时将放置在<tr>标记中

-z <td-attributes>

表示HTML属性的字符串,

使用–w时将放置在<td>标记中

为了实现优化PHP脚本的目标,我们需要将少数的选项调到零点。这些选项如下所示。

n:要模拟的请求数;

c:要模拟的并发请求数;

t:执行模拟所需要的时间。

初始安装ab之后,使用标记n运行模拟。现在让我们使用其他标记并看一看www.example. com网站包含的初始基准测试数据。

1. 并发测试

根据Web应用程序的不同,用户在应用程序上的时间可以从几秒钟到几分钟不等。如果你的站点非常吸引人,或者是受到了恶意用户的DOS攻击,进入的用户流可能大幅波动,从很小的流量到很高的流量。你需要模拟真实的流量来测试网站是否能够应付这样的情况。

我们将模拟一个并发测试,同时对Web服务器进行10个并发请求,直到进行到100个请求为止。使用c标记时的一项警告是让使用的值小于要进行的请求总数n。如果值等于n,则只会并发请求所有n个请求。为此,我们执行如下命令。

  1. ab -n 100 -c 10 http://www.example.com/

运行该命令之后,应该得到一个类似于图1-6的响应。

通过模拟的并发请求,我们可以看到Request per second字段,并注意到Web服务器每秒可以支持22.38个请求(用户)。分析Connection Metrics的Total min和max列,我们注意到在10个并发请求的指定流量负载下,最快的响应为94毫秒,而最慢的请求花了547毫秒。

但是,我们知道流量不会只是持续1、2或3秒,高流量可能会持续几分钟、几小时,甚至是几天。下面让我们运行一个模拟来测试一下。

2. 时间测试

我们注意到每天接近中午时,网站会达到流量高峰,这个高峰会持续10分钟。在这种情况下,Web服务器执行得如何?我们将要使用的下一个标记就是t标记。使用t标记,可以检查在任何时间内Web服务器执行的情况。

下面我们使用以下命令来模拟10个用户在20秒的时间内同时访问网站:

  1. ab -c 10 -t 20 http://www.example.com/

该命令不包含n标记,但默认情况下包含该标记并且使用t选项时ab将其值设置为50 000。某些情况下,使用t选项时,最大请求数可能会达到50 000,此时模拟结束。

此ab命令完成其模拟之后,将会获得类似于图1-7所示的数据。

此模拟的结果指出,当10个并发用户在20秒的时间段内请求Web文档时性能会下降。最快速的满足请求花费了328毫秒,而最慢速的请求花费了1859毫秒(1.8秒)。

1.4.5 ab陷阱

使用ab时有几点警告。如果你再看看刚刚执行的这个命令,就会注意到在域名的结尾有一个反斜杠。如果你不请求该域中的特定文档,则这个反斜杠是必需的。ab还可能会由于其传递给Web服务器的用户代理值而被某些Web服务器阻止,因此在某些情况下,可能收不到任何数据。如果要解决后面这个问题,请使用可用的选项标记之一-H,来提供你的请求中的自定义浏览器标头信息。

若要通过Chrome浏览器模拟请求,可以使用以下ab命令:

    1. ab -n 100 -c 5 -H "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWeb
    2. Kit/534.2 (KHTML, like Gecko) Chrome/6.0.447.0 
      Safari/534.2" http://www.example.com

参考:http://book.51cto.com/art/201110/299804.htm

Apache benchmark 压力测试工具的更多相关文章

  1. [转] CentOS单独安装Apache Benchmark压力测试工具的办法

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 ab运行需要依赖apr-util包,安装命令为: 1 ...

  2. Apache中压力测试工具ab的操作说明

    1.压力测试工具ab(ApacheBench)的简单说明 1)     网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个 ...

  3. apache benchmark并发测试工具使用

    ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如nginx.tomcat.IIS等. 一.Apach ...

  4. apache ab 压力测试工具

    Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力.Apache附带的ab工具(使用的PHP环境是WAMP集成环境, ...

  5. MAC 安装 apache ab 压力测试工具以及遇到的坑

    ab 是apache对 http服务器进行压力测试的工具,它可以测试出服务器每秒可以处理多少请求.本文记录mac版本安装 ab 的步骤以及遇到的坑. 下载 进入 apache ab官网 下载页面. 安 ...

  6. CentOS7单独安装Apache Bench压力测试工具

    用于并发测试. 1.安装 # need to run ab,apache portable runtime yum install apr-util # yum install yum-utils # ...

  7. 压力测试工具:apache bench(ab)

    作为php后端工程师,除了实现业务需求之外,需要考虑的就是自己写的服务,在大并发下是否能正常运行了,例如在我之前文章讲到的,在并发下,数据库查询可能会造成脏读幻读等情况,导致业务不正常. 但是,在一般 ...

  8. Apache自带压力测试工具ab用法简介

    ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...

  9. 网站服务器压力Web性能测试(1):Apache Bench:Apache自带服务器压力测试工具

    一个网站或者博客到底能够承受多大的用户访问量经常是我们在用VPS或者独立服务器搭建网站了最关心的问题,还有不少人喜欢对LNMP或者LAMP进行一些优化以便提高Web性能,而优化后到底有多大的效果,就需 ...

随机推荐

  1. android开发者博客二月Android Studio2.0测试

    参考网页-http://android-developers.blogspot.com/2016/02/android-studio-20-beta.html Android Studio 2.0-B ...

  2. jquery的事件绑定

    暂时有 bind(),live(),delegate(),on() 这四个事件监听函数 对应的4个事件解除函数分别是: unbind(),die(),undelegate(),off() bind:向 ...

  3. JS调用PHP 和 PHP调用JS的方法举例

    http://my.oschina.net/jiangchike/blog/220988 1.JS方式调用PHP文件并取得PHP中的值举一个简单的例子来说明:如在页面test_json1中用下面这句调 ...

  4. JAVA长连接demo

    http://blog.csdn.net/caomiao2006/article/details/38830475 JAVA长连接demo 2014-08-25 23:20 4767人阅读 评论(2) ...

  5. Solr使用初探——SolrJ的使用

    二.SolrJ的使用 SolrJ覆盖了solr的全部功能,下面将自己在实际开发中所使用的程序粘贴出来并适当加以解释,由于本人比较菜,代码书写不是那么的精练,还请见谅. 1.  创建solrserver ...

  6. Ext.Net学习笔记04:Ext.Net布局

    ExtJS中的布局功能很强大,常用的布局有border.accordion.fit.hbox.vbox等,Ext.Net除了将这些布局进行封装以外,更是对border进行了一些非常实用的改进,让我们来 ...

  7. asp.net:验证控件中ValidationExpression的写法

    手机号:"\d{11}"传真号:"\d{7,12}" EMAIL: ".{2,15}@.{2,15}\..{2,4}" 邮箱正则表达式:/^ ...

  8. Javascript模仿C语言的链表实现(增删改查),并且使用控制台输入输出

    Js新手最近在研究Js数据结构,刚好看到链表实现这一块儿,觉得有些资料和自己理解的有冲突,于是借着自己以前一点点C语言的基础,用Javascript模仿了C的链表实现,并且用了process.stdi ...

  9. requirejs实践一 加载JavaScript文件

    首先,目录如下(根目录有一个index.html文件.有一个scripts文件夹): scripts文件夹有如下的文件 以下是index.html代码 <!DOCTYPE html> &l ...

  10. time.h文件中包含的几个函数使用时须注意事项

    time.h头文件中包含以下函数 char* asctime(const struct tm *tm); char* asctime_r(const struct tm *tm,char *buf); ...