需求:

在对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代码  
  1. /* -t 说明 */
  2. fprintf(stderr, "    -t timelimit    Seconds to max. wait for responses\n");
C代码  
  1. /* maximum number of requests on a time limited test */
  2. #define MAX_REQUESTS (INT_MAX > 50000 ? 50000 : INT_MAX)
  3. /* 参数处理 */
  4. case 't':
  5. tlimit = atoi(optarg);
  6. requests = MAX_REQUESTS;    /* need to size data array on
  7. * something */

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

这就会有两种情况出现:

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

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

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

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

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

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

C代码  
  1. /* maximum number of requests on a time limited test */
  2. #define MAX_REQUESTS (INT_MAX > 10000000 ? 10000000 : INT_MAX)

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

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

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

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

C代码  
  1. case 'n':
  2. requests = atoi(optarg);
  3. if (requests <= 0) {
  4. err("Invalid number of requests\n");
  5. }
  6. break;
  7. case 't':
  8. tlimit = atoi(optarg);
  9. requests = MAX_REQUESTS;    /* need to size data array on
  10. * something */
  11. break;

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

C代码  
  1. /* 执行命令 */
  2. ./ab -c 10 -t 1000 -n 10000000 "http://www.xxx.com/index.html"
  3. /* 执行结果 */
  4. Document Length:        112640 bytes
  5. Concurrency Level:      10
  6. Time taken for tests:   1000.003 seconds
  7. Complete requests:      519246

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

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

原文地址:http://100continue.iteye.com/blog/1325398

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

  1. Web 压力测试工具 --Apache AB

    AB(ApacheBench)是Apache自带的超文本传输协议(HTTP)性能测试工具. 其设计意图是描绘当前所安装的Apache的执行性能, 主要是显示Apache每秒可以处理多少个请求. 该工具 ...

  2. 压力测试工具Apache JMeter:11:搭建容器化分布式测试环境

    Apache JMeter是一个纯Java开发的用于负载测试或者性能测试的开源软件.这篇文章介绍一下建立基于JMeter的一主多从的容器化压测环境. 基于Alpine的JMeter镜像 关于基于Alp ...

  3. ab测试工具 linux,超实用压力测试工具-ab工具

    写在前面 在学习ab工具之前,我们需了解几个关于压力测试的概念吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内 ...

  4. [收藏]超实用压力测试工具-ab工具

    本文转载自:https://www.jianshu.com/p/43d04d8baaf7 写在前面 在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second ...

  5. 压力测试工具-ab工具

    写在前面 在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间 ...

  6. 压力测试ab安装 linux,Centos8下安装ab压力测试工具及ab命令详解

    释放双眼,带上耳机,听听看~! 1.ab的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以 ...

  7. html5 并发测试工具,超实用压力测试工具-ab工具

    吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数.某个并发用户数下单位时间内能处理的最大请求数,称 ...

  8. 开源性能测试工具 - Apache ab 介绍

    开源性能测试工具 - Apache ab 介绍 简介 ab的全称是ApacheBench,是 Apache 附带的一个小工具,专门用于 HTTP Server 的benchmark testing,可 ...

  9. ab压力测试_CentOS安装压力测试工具ApacheBench(ab)

    官方文档: https://httpd.apache.org/docs/2.4/programs/ab.html ab原理: ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访 ...

最新文章

  1. 【GTSAM】GTSAM学习
  2. 一文理解CatBoost!
  3. 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
  4. Ubuntu18.04 显卡驱动安装
  5. 利用WinPcap技术捕获数据包
  6. Kubernetes API server工作原理
  7. 计算机网络之物理层:7、物理层设备(中继器、集线器)
  8. Python并发之协程gevent基础
  9. [Codeforces235D]Graph Game——概率与期望+基环树+容斥
  10. Matlab函数之lower函数与upper函数
  11. Vue中watch用法详解
  12. PHP关于按位取反结果的推导过程
  13. 优化算法进阶;word2vec;词嵌入进阶
  14. python三对角矩阵_用NumPy实现三对角矩阵算法(TDMA)
  15. 波特率、比特率和通信速率
  16. 不来了解下JVM支持的语言有哪些?
  17. 在同一子网下用wireshark抓取QQ用户发送到电脑的图片
  18. python作用域的理解-python中对变量的作用域LEGB、闭包、装饰器基本理解
  19. duilib最新版地址
  20. 强化学习相关论文阅读笔记之稀疏奖励解决方法

热门文章

  1. Vue父子组件通信和插槽
  2. 信仰坚持!程序员也有春天!
  3. 圆形ImageView系列(一)-----Xfermode+View
  4. 树莓派python蓝牙_树莓派3B 爬虫蓝牙播放器
  5. 另起炉灶?认证为锤子科技的坚果OS官微现身
  6. AD20 快捷键设置
  7. 怎么在html中加入文字,如何在指定的地方插入html内容和文本内容
  8. bazel 工具函数
  9. bazel 链接_[bazel]-bazel的使用
  10. uniapp 去掉h5导航(微信公众号去掉和h5保留)