• Apache benchmark 压力测试工具


      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

  • 相关阅读:
    shell学习笔记(3)shell运算符
    封装gorm的CRUD操作
    装饰器的使用
    shell学习笔记(2)
    shell学习笔记(6)test命令
    原地翻转或旋转矩阵
    shell学习笔记(5)printf输出
    回溯算法的所有排列、组合、子集问题
    Web Dynpro for ABAP(5):System Logon
    Web Dynpro for ABAP(6):Context in Detail
  • 原文地址:https://www.cnblogs.com/youxin/p/3835480.html
Copyright © 2020-2023  润新知