高血压专题网,内容丰富有趣,生活中的好帮手!
高血压专题网 > 性能/压力测试工具Apache ab修改:按时间进行性能/压力测试

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

时间:2021-08-13 09:42:39

相关推荐

性能/压力测试工具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。

C代码/*-t说明*/ fprintf(stderr,"-ttimelimitSecondstomax.waitforresponses\n");C代码/*maximumnumberofrequestsonatimelimitedtest*/ #defineMAX_REQUESTS(INT_MAX>50000?50000:INT_MAX) /*参数处理*/ case't': tlimit=atoi(optarg); requests=MAX_REQUESTS;/*needtosizedataarrayon *something*/

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

这就会有两种情况出现:

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

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

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

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

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

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

C代码/*maximumnumberofrequestsonatimelimitedtest*/ #defineMAX_REQUESTS(INT_MAX>10000000?10000000:INT_MAX)

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

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

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

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

C代码case'n': requests=atoi(optarg); if(requests<=0){ err("Invalidnumberofrequests\n"); } break; case't': tlimit=atoi(optarg); requests=MAX_REQUESTS;/*needtosizedataarrayon *something*/ break;

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

C代码/*执行命令*/ ./ab-c10-t1000-n10000000"/index.html" /*执行结果*/ DocumentLength:112640bytes ConcurrencyLevel:10 Timetakenfortests:1000.003seconds Completerequests:519246

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

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

原文地址:/blog/1325398

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。