`
100Continue
  • 浏览: 159786 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

性能/压力测试工具Apache ab修改:按时间进行性能/压力测试

阅读更多

需求:

在对Nginx module 采用Aapche ab进行性能和压力测试的过程中发现:

1. 对于不同的并发线程,相同的请求数,性能/压测所需要的时间变化比较大;

2. 对于高并发的情况下,千万级别的请求数,持续时间仅仅是几百秒,不仅不足以用于压力测试,而且也不足以充分体现服务器的CPU, load, memory等的运行状况;

因此,非常有必要使Apache ab能够按照时间设置来进行性能/压力测试。

 

以下是实际的ab测试数据:

 

并发数为2600的测试数据 写道
Document Length: 265 bytes
Concurrency Level: 2600
Time taken for tests: 330.728 seconds
Complete requests: 10000000
并发数为100的测试数据 写道
Document Length: 265 bytes
Concurrency Level: 100
Time taken for tests: 517.260 seconds
Complete requests: 10000000
  

解决方案:

经过对Apache ab源代码进行分析后,发现:

1. ab本身提供的参数 -t timelimit    Seconds to max. wait for responses, 可以用于设置ab的总测试时间;

2. 当使用-t参数时,ab内部默认最大的请求数为50000。

 

/* -t 说明 */
fprintf(stderr, "    -t timelimit    Seconds to max. wait for responses\n");
  
/* maximum number of requests on a time limited test */
#define MAX_REQUESTS (INT_MAX > 50000 ? 50000 : INT_MAX)

/* 参数处理 */
case 't':
                tlimit = atoi(optarg);
                requests = MAX_REQUESTS;    /* need to size data array on
                                                                  * something */
  

也就是说,-t参数的原本目的,是用于设置响应超时时间的,在最大请求数50000次的前提下的超时时间。

这就会有两种情况出现:

1. 如果50000次请求在所设置的超时时间内未全部请求完成,则ab会默认结束后续的请求并统计最终数据。

2. 如果50000次请求提前在所设置的超时时间内全部完成,则ab会在请求完成后终止并统计最终数据,也就说,不管你超时时间设置多长,ab只会请求50000次。

这对于长时间的性能和压力测试来说,并不靠谱。

因此,我们需要考虑下,如何在对ab的源码改动量最小的情况下,使其能够按照我们所设置时间进行测试。在此提供两个解决方案。

 

解决方案一:需要修改源代码

将设置-t参数之后的默认最大请求数改为我们需要的数目,如:

 

/* maximum number of requests on a time limited test */
#define MAX_REQUESTS (INT_MAX > 10000000 ? 10000000 : INT_MAX)

 

但是,这需要注意一个问题:

1.  requests变量是int类型,人为设置最大请求数时,注意不要超过变量的边界;

 

解决方案二:不需修改源代码——从ab源码的小漏洞来设置超时时间和最大请求数(推荐)

根据ab源代码对传入参数的解析顺序来看,对-n的参数的解析是在-t之前。而他们均需要设置requests变量的值。

 

case 'n':
                requests = atoi(optarg);
                if (requests <= 0) {
                    err("Invalid number of requests\n");
                }
                break;

case 't':
                tlimit = atoi(optarg);
                requests = MAX_REQUESTS;    /* need to size data array on
                                                                  * something */
                break;

 

因此,我们可以在设置ab参数时,先设置-t超时时间,再设置-n最大请求数。这样request变量就会被-n重新设置,并且能为我们检测所设置的最大请求数是否符合要求。 如:

 

/* 执行命令 */
./ab -c 10 -t 1000 -n 10000000 "http://www.xxx.com/index.html"

/* 执行结果 */
Document Length:        112640 bytes
Concurrency Level:      10
Time taken for tests:   1000.003 seconds
Complete requests:      519246

 从结果可以看出:最大请求数超过默认值50000,且按照我们设置的超时时间终止。 

 

ok,对Apache ab 按照时间进行性能/压力测试到此结束。

2
0
分享到:
评论
2 楼 100Continue 2011-12-26  
kimmking 写道
非常有趣的技巧

本来还在想着需要修改源代码,结果发现这个小漏洞,直接绕过request的设置了。
1 楼 kimmking 2011-12-26  
非常有趣的技巧

相关推荐

    (转)ab-tomcat压力测试工具

    【标题】:“(转)ab-tomcat压力测试工具” 【描述】:这篇博客文章并未提供具体的描述,但根据标题可以推断,它可能涉及一个名为"ab"的压力测试工具在Tomcat应用服务器上的使用。"ab"是Apache HTTP服务器项目的一...

    RHEL5.4下搭建Apache+Mysql+Php+Discuz+PhpMyAdmin+Awstats+AB压力测试

    根据给定的信息,本文将详细解释如何在RHEL 5.4环境下搭建一套完整的LAMP(Linux、Apache、MySQL、PHP)系统,并在此基础上增加Discuz论坛、Awstats Web日志分析工具、以及使用AB(ApacheBench)进行HTTP性能测试,...

    Gatling实用技术 ----高性能轻量级压力测试工具

    与传统的压力测试工具相比,如LoadRunner和JMeter,Gatling无需复杂的客户端安装,只需要JVM环境即可运行,操作方式类似于Apache的ab命令,更加便捷。 Gatling的一大亮点在于其专用的Web测试功能,它允许用户像...

    下最新源码搭建Apache+Mysql+Php+Discuz+PhpMyAdmin+Awstats+AB压力测试

    根据提供的文件信息,本文将详细解释如何在RHEL 5.4系统环境下,从源码构建并部署Apache、MySQL、PHP、Discuz、phpMyAdmin、Awstats以及使用AB进行压力测试的过程。此过程旨在搭建一个完整的LAMP环境,并集成一系列...

    行业分类-设备装置-云平台性能测试方法及装置.zip

    4. Apache Bench (ab):轻量级的HTTP服务器性能测试工具。 5. CloudHarmony:专注于云服务性能测试,提供跨云平台的比较和基准测试。 四、云平台性能测试装置 1. 虚拟机集群:通过搭建虚拟机集群模拟大规模用户,...

    apache 相关工具模块

    - **ab (Apache Bench)**:性能基准测试工具,可以模拟多个并发用户对服务器进行压力测试。 - **httpd-tweak**:一些发行版提供的优化工具,用于调整服务器配置以提升性能。 4. **源码编译**:对于开发者,Apache...

    ab压力测试hhvm运行ci

    在"ab压力测试hhvm运行ci"这个场景中,"ab"工具(ApacheBench)被用于模拟大量并发用户对HHVM运行的CI环境进行压力测试。ApacheBench是Apache HTTP服务器自带的一个基准测试工具,它可以测量一个Web服务器在特定负载...

    ab压力测试的安装、使用、破2万并发测试

    【AB压力测试详解】 ...总之,AB是一个强大的Web服务器压力测试工具,通过熟练掌握其安装、使用和参数设置,能够有效地评估服务器的性能瓶颈和并发处理能力,为优化服务器配置和提升服务质量提供重要参考。

    测试工具总结

    本文将详细介绍几个常见的测试工具,包括Web服务器压力测试工具和数据库性能测试工具。 首先,Webbench是一个广泛使用的开源Web服务器压力测试工具,由Lionbridge公司开发。它可以模拟大量并发用户对网站发起请求,...

    nginx性能测试与优化1

    使用ab或wrk工具,可以设置并发用户数、请求次数等参数,对Nginx服务器进行压力测试,获取吞吐量、响应时间等指标,根据测试结果进行性能优化,如调整worker_processes、worker_connections、sendfile、tcp_nopush...

    压测工具httpd-2.4.41-win64-VS16.rar

    【标签】"压力测试工具 ab" 强调了这个压缩包内包含的Apache Bench(ab)工具。Apache Bench是一款轻量级的压力测试工具,它可以模拟多个并发用户对Web服务器发送HTTP请求,从而测试服务器的处理能力和稳定性。这...

    Go-替代ApacheBench(ab)的HTTP负载生成器

    标题中的“Go-替代ApacheBench(ab)的HTTP负载生成器”指的是使用Go语言编写的一种工具,它能够替代传统的ApacheBench(ab)工具来执行HTTP负载测试。ApacheBench是一款广泛使用的命令行工具,用于测量Web服务器的...

    201118003_Linux操作系统_课程设计报告_Linux下Apache性能分析.pdf

    在课程设计过程中,学生可能通过编写脚本、使用性能监测工具(如top、vmstat、iostat)收集数据,进行Apache的基准测试和压力测试,分析结果并提出优化建议。测试报告会详细记录测试环境、方法、结果和结论。 7. ...

    Apache优化全面详细教程

    6. **性能测试**:使用工具如ab(ApacheBench)进行基准测试,确保性能得到了实际提升。 #### 四、PHP加速 除了Apache本身的优化外,PHP作为常用的Web开发语言之一,其性能也直接影响着整个网站的速度。以下是两种...

    第二十七章:apache应用详解及优化1

    ### 四、Apache的ab压力测试 Apache Bench (ab) 是一个用于测量服务器性能的工具。它可以模拟多个并发用户请求,帮助评估服务器的承受能力。例如,测试10个并发请求100次: ``` ab -n 100 -c 10 http://localhost/...

    Installing Accelerated OpenSSL (OCF) and Apache* on Linux*

    - **性能测试**:使用工具如 `ab` 或 `wrk` 对网站进行压力测试,观察响应时间和吞吐量。 - **安全性评估**:利用在线工具如 SSL Labs 的 SSL Server Test 进行安全性评估。 ### 五、注意事项 - **更新维护**:定期...

Global site tag (gtag.js) - Google Analytics