需求:
在对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 按照时间进行性能/压力测试到此结束。
分享到:
相关推荐
Apache 压力测试工具ab 专注接口测试 并发测试Apache 压力测试工具ab 专注接口测试 并发测试
Apache JMeter是Apache组织开发的压力测试工具,也是目前应用最广泛的开源性能测试工具之一。 不过要记住Jmeter由JAVA开发,安装Jmeter之前需要先安装JDK。
ab是Apache超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能, 主要是显示你安装的Apache每秒可以处理多少个请求。
ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。
-n 即requests,用于指定压力测试总共的执行次数。 -c 即concurrency,用于指定的并发数。 -t 即timelimit,等待响应的最大时间(单位:秒)。 -b 即windowsize,TCP发送/接收的缓冲大小(单位:字节)。 -p 即...
Apache JMeter是Apache组织开发的基 于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本...
Apache压力测试工具,附个人使用笔记,很容易看懂
apache-jmeter-5.4.3.zip jmeter5.4.3需要java8+的环境,本压缩包中包含了 jdk8 和 jmeter5.4.3 两个压缩包。 下载至本地后,解压压缩包,点击(jmeter)进入bin文件夹,双击jmeter.bat文件,会启动JMeter GUI工具
NULL 博文链接:https://houzhe11.iteye.com/blog/719461
5、Apache ab 压力测试:ab的全称是ApacheBench,ab是Apache 附带的超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求;
《零成本实现web性能测试:基于apache jmeter》 第1章 性能测试基础 1 1.1 初识性能测试 1 1.1.1 性能测试的概念 1 1.1.2 性能测试的目的 2 1.1.3 性能测试的常见分类 2 1.1.4 性能测试的常见指标 3 1.1.5 性能测试...
压力测试工具apache-jmeter,本人正在学习压力测试,分享出来收取一点点回馈去下载所需要的东西~~~
(2)本书实例源程序运行测试环境为: JDK 5.0 update 6和JDK 6.0 beta Tomcat 5.5.12 MySQL 5.0.16 (3)本书涉及的共享软件或免费软件的链接地址如下。 JDK: http://java.sun.com Tomcat: ...
Apache Jmeter能够对HTTP和FTP服务器进行压力和性能测试。
apache-jmeter-3.1的简单压力测试使用方法(下载和安装) 博客转载https://blog.csdn.net/lan_shu/article/details/55190127 压力测试工具LoadRunner是收费的,而且操作复杂。作为开发人员当然是用apache提供的...
NULL 博文链接:https://2279972332.iteye.com/blog/1989163
apache的ab.exe服务器压力测试工具,用于对各种服务器压力测试
《零成本实现Web性能测试:基于Apache JMeter》是一本关于Web性能测试的实战书籍,读者朋友们在认真阅读完《零成本实现Web性能测试:基于Apache JMeter》后,相信能够将所学知识应用到生产实践中。《零成本实现Web性能...
测试工具 ab apache 性能测试 web开发 网站开发
apache压力测试之ab 有研究或探讨或开源的请加群:37424970 或联系本人MSN或邮箱:zhuseahui@yahoo.com.cn