性能/压力测试工具Apache ab修改:按时间进行性能/压力测试
来源:互联网 发布:环绕音乐制作软件 编辑:程序博客网 时间:2024/06/06 05:27
需求:
在对Nginx module 采用Aapche ab进行性能和压力测试的过程中发现:
1. 对于不同的并发线程,相同的请求数,性能/压测所需要的时间变化比较大;
2. 对于高并发的情况下,千万级别的请求数,持续时间仅仅是几百秒,不仅不足以用于压力测试,而且也不足以充分体现服务器的CPU, load, memory等的运行状况;
因此,非常有必要使Apache ab能够按照时间设置来进行性能/压力测试。
以下是实际的ab测试数据:
Concurrency Level: 2600
Time taken for tests: 330.728 seconds
Complete requests: 10000000
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 按照时间进行性能/压力测试到此结束。
原文地址:http://100continue.iteye.com/blog/1325398
- 性能/压力测试工具Apache ab修改:按时间进行性能/压力测试
- 压力 性能 测试 工具 ab (apache benchmark) jmeter
- Apache的ab工具进行压力测试
- Apache的ab工具进行压力测试
- apache 压力测试工具ab
- apache 压力测试工具ab
- apache 压力测试工具ab
- apache压力测试工具ab
- apache 压力测试工具ab
- apache 压力测试工具ab
- 压力测试工具Apache ab
- apache使用ab进行页面的压力测试,并发测试,性能测试,中文注释
- 网站压力测试方法- Apache自带的性能测试工具ab的使用
- 使用apache自带的ab压力测试工具测试网站性能
- PHP 使用Apache 中的ab 测试网站的压力性能
- PHP使用Apache中的ab测试网站的压力性能
- PHP使用Apache中的ab测试网站的压力性能
- PHP使用Apache中的ab测试网站的压力性能
- HashMap
- JAVA基础--集合
- 编辑距离的php实现
- LeetCode 409. Longest Palindrome
- 面试题---数据库多表查询
- 性能/压力测试工具Apache ab修改:按时间进行性能/压力测试
- 【java】浅谈java内部类
- 第一周 第二次 算法设计的基本要求
- react基础(2)
- android material doc
- 翻译:MariaDB ALTER TABLE语句
- java打地鼠游戏
- 为什么你需要将代码迁移到ASP.NET Core 2.0?
- 错误——MySQL在navicat打开时出现1045