设为首页 收藏本站
查看: 930|回复: 0

[经验分享] 性能/压力测试工具Apache ab修改:按时间进行性能/压力测试

[复制链接]

尚未签到

发表于 2017-1-14 08:10:22 | 显示全部楼层 |阅读模式
  需求:
  在对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 按照时间进行性能/压力测试到此结束。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-328094-1-1.html 上篇帖子: 三种压力测试工具 http_load 和 apache ab 、 siege 压力测试(转) 下篇帖子: target runtime apache tomcat v6.0 is not defined 解决办法2种
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表