apache并发测试工具ab为什么测不准

发表于2年前(2013-03-21 12:13)   阅读(1146) | 评论(11人收藏此文章, 我要收藏
0

3月21日 深圳 OSC 源创会正在报名中,送华为海思开发板

       
我们常常使用apache下的并发测试工具ab进行动态或静态页面URL的并发测试,以此作为服务器性能、配置以及系统架构是否合乎要求的一个衡量标准。
但是有一个问题,就是ab的表现并不稳定,在不同的机器上用ab对同一个服务器上的URL资源做测试常常出现截然不同的数据。就算在同一台机器上用ab做
测试,测试10组数据,也会有几组的数据存在较大的差异,以下是我曾做过的几组试验,先介绍下试验步骤及环境。
        1、首先准备一台机器作为web服务器,硬件配置为硬件配置为Intel(R) Celeron(R) CPU G530 @
2.40GHz 32位 内存4G 双核,系统版本CentOS release 5.5,web服务器版本Apache/2.2.14。
        2、web服务器采用apache,采用worker模式,具体配置为:
             


             默认开启5个进程,每个进程下2个线程,最大开75个线程(此参数关系到实际系统开启的进程数,如果开启进程设置过多,以最大线程数为准),最大连接数为500。
       3、apache以调用php模块的方式执行php脚本(非fast-cgi模式)。
     
 4、首先在两台不同的机器上对此服务器用ab进行压测,将两台不同的机器编号为A与B,A为一台笔记本,性能较差,2G内存,且上面运行了一些程序占用
了一定比率的CPU及内存。B为一台台式机,硬件配置为CPU Intel G530 2.4GHz 内存 4GB,下面是测试数据:
            A        
               50个并发,执行50次页面(每个连接执行一次页面,页面为phpinfo页面)
               平均执行时间在17~18秒 简直不能忍
            B 
               50个并发,执行50次页面
                平均执行时间在0.2秒左右 毫无压力(3次平均)

               100个并发,执行100次页面
                平均执行时间在0.4秒左右 (3次平均)
               200个并发,执行200次页面
                平均执行时间在0.8秒左右(3次平均)
           用A机器进行的测试结果,并发量连50都达不到,但用B机器测试WEB服务器可以胜任200个并发处理。为什么会出现如此截然不同的数据差别,还是要从原理上来分析。
         
 ab是客户端模拟多线程来通过socket对服务器发起TCP请求,并等待服务器处理执行页面输出页面结果并返回到客户端以此来计算页面的执行时间等相
关数据。那么客户端CPU处理多线程的能力,测试时客户机的CPU状态、内存状态都会对测试结果造成影响,如果客户机同时处理这么多请求的能力很弱,那么
需要很长时间才能将请求发送到服务器,服务器处理完后也需要很长时间对返回数据做处理,这样就达不到测试服务器性能的要求了。因为时间都被客户机耗去了。
所以我们在测试的时候首先要选择好测试机,尽量选择性能较好的机器测试。因为得出的结论是天差地别的。
         5、接下来我们单独用B机器进行测试,进行高强度的测试,连续测试20组数据,以200个并发、执行200次页面为测试条件,测试页面还是phpinfo页面,以下是测试数据:
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
              每秒请求数:237 每个请求执行时间:843
             测试结果非常稳定,没有大差异的结果。那么用300个并发、执行300次页面为测试条件结果会是怎样呢,以下是测试数据:
             每秒请求数:79 每个请求执行时间:3765
             每秒请求数:80 每个请求执行时间:3718
             每秒请求数:81 每个请求执行时间:3671
             每秒请求数:80 每个请求执行时间:3750
             每秒请求数:79 每个请求执行时间:3796
             每秒请求数:81
 每个请求执行时间:3687
             每秒请求数:79 每个请求执行时间:3765
             每秒请求数:82 每个请求执行时间:3656
             每秒请求数: 81 每个请求执行时间:3703
             每秒请求数: 82 每个请求执行时间:3640
             在高并发下的执行结果也比较稳定。
      6、接下来我们在web服务器上进行测试,看测试结果是怎样的,测试10组数据 以200个并发、执行200次页面为测试条件,测试页面为phpinfo页面,以下是测试数据:
            每秒请求数:1716 每个请求执行时间:116
            每秒请求数:1764 每个请求执行时间:113
            每秒请求数:1706 每个请求执行时间:117
            每秒请求数:1643 每个请求执行时间:114
            每秒请求数:1767 每个请求执行时间:113
            每秒请求数:1732 每个请求执行时间:115
            每秒请求数:727 每个请求执行时间:274
            每秒请求数:249 每个请求执行时间:801
            每秒请求数:1728 每个请求执行时间:115
            每秒请求数:113每个请求执行时间: 1765
           
以上结果,比在B机器上表现的更好,但存在几个不稳定的数据。分析一下,一方面是网络传输速度的原因导致(本机上网络传输速度更快,所以成绩较好)。另一
方面是由于ab本身在执行的时候消耗的cpu的性能,但这个我的观点是影响可以忽略不计。还有一方面导致数据不稳定的因素可能是由于TCP连接在上一次测
试时为完全释放导致的原因。
           
综上所述,对于测试web服务器的性能,我们最好可以找一台独立的、性能较好的、并且上面没有运行很多应用程序的机器进行测试,这样的结果会更接近生产环
境的实际结果。实际的php页面执行复杂度可能是phpinfo的好几倍,所以在选定测试页面时,可以预先做一些复杂度更高的php页面进行测试,这样测
试的准确度会更高。

apache并发测试工具ab为什么测不准的更多相关文章

  1. Apache -- 压力测试工具ab.exe

    ab全称ApacheBench是Apache超文本传输协议(HTTP)的性能测试工具.是描绘当前所安装的Apache的执行性能, 主要是显示你安装的Apache每秒可以处理多少个请求Apache自带的 ...

  2. apache 负载测试工具 ab

    1.ab工具是apache自带的工具,可以测试服务器的负载能力 2.ab工具的参数 -v:版本 -c:并发数 -n:请求数 -t: 测试所进行的最大秒数 3.例子:ab -c 100 -n 100 - ...

  3. 简单的并发测试工具 ab.exe ab.zip可下载 -摘自网络

    ab.exe是一个性能检测工具,是apache server中的一个小组件,使用简单,方便    下载地址:http://files.cnblogs.com/files/gossip/ab.zip   ...

  4. Ubuntu 16.04下安装Apache压力测试工具ab

    安装 sudo apt-get install apache2-utils 简单使用 # 对http://www.baidu.com/进行100次请求,10个并发请求压力测试结果. ab -n 100 ...

  5. Apache ab 压力并发测试工具

    当你使用PHP(或其他编程语言)完成一个web程序的开发,并且web程序在Apache服务器上正常运行的时候,你有没有考虑过对你的Apache服务器及部署在其上的web程序进行一些压力测试呢?毕竟,真 ...

  6. Apache压力(并发)测试工具ab的使用教程收集

    说明:用ab的好处,在处理多并发的情况下不用自己写线程模拟.其实这个世界除了LoadRunner之外还是有很多方案可以选择的. 官网: http://httpd.apache.org/(Apache服 ...

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

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

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

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

  9. apache自带压力测试工具ab的使用及解析

    当你搭建了apache服务器并在上面部署了web网站,在网站运行前,为了使apache服务器的性能得到更好的应用,我们可以先对其进行压力测试.进行压力测试其实非常简单,我们也不用再额外下载安装什么测试 ...

随机推荐

  1. MVC对集合筛选,不使用Where(),而使用FindAll()

    当想对集合筛选的时候,经常想到用Where过滤,而实际上List<T>.FindAll()也是不错的选择. 如果有一个订单,属性有下单时间.区域等等.如何使用List<T>.F ...

  2. Windows系统虚拟内存文件和休眠缓存大小优化

    虚拟内存的大小设置 虚拟内存的文件 pagefile.sys 一般在系统盘的根目录下,默认情况下会比较大.下面给出缩小设置方式. 我的电脑(鼠标右键)--属性--高级系统设置--切换到“高级”选项卡- ...

  3. 详解Linux中CentOS6.8下解压安装mysql-5.7.14

    原文:http://blog.csdn.net/yangle4695/article/details/52185859 mysql下载地址:http://dev.mysql.com/downloads ...

  4. [深入浅出iOS库]之图形库CorePlot

    一,前言 Core Plot和s7Graph都是可在iOS平台下使用的开源矢量图形库,s7Graph功能相对比较简单一些,在此就不介绍了.Core Plot 功能强大很多,我们可以利用它很方便地画出复 ...

  5. 文件内容操作篇clearerr fclose fdopen feof fflush fgetc fgets fileno fopen fputc fputs fread freopen fseek ftell fwrite getc getchar gets

    clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * stream); 函数说明 ...

  6. JConsole详解

    一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JCons ...

  7. cout的输出格式初探2

    #include <iostream> #include <iomanip> using namespace std; int main() { cout<<&qu ...

  8. QT QCharts QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失

    在最近接到的需求是这样的,画一个折线图,关键点使用空心的圆点标识出来,鼠标移动到关键点上,显示出当前数值:鼠标移走数值消失. 我们遇到这个需求的时候,第一时间就会想到使用 QLineSeries 画折 ...

  9. UVA 10012 How Big Is It?(暴力枚举)

      How Big Is It?  Ian's going to California, and he has to pack his things, including his collection ...

  10. Android -- taskAffinity

    每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task.如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个属性就等于Ap ...