文档章节

apache ab 输出结果详细解析(源码分析)

lubia
 lubia
发布于 2013/11/18 13:21
字数 802
阅读 2712
收藏 5

同步更新在独立博客

用过ab做压力测试的朋友对这张图应该不陌生,但大多数人并不明白这代表什么意思,更别说怎么计算出来的了。虽然ab有很多问题(甚至无法避免),但仍然值得研究。

通常只关注两项

Requests per second:    3680.02 [#/sec] (mean) 

//每秒事务数:总事务数 / 执行时间

Time per request:       0.230 [ms] (mean, across all concurrent requests)

//事务平均执行时间:执行时间 / 总事务数

但这两项只能给出大概的结果,详细的分析还要依赖上图,下面逐项分析

有Connect,Processing,Waiting,Total四项,详细的分析在后面源码分析中给出。

 每一项分别有min(最小值),mean(平均值),[+/-sd](方差),median(中位数),max(最大值)

要计算出以上各项,主要依赖于两个结构体

struct connection {
    ....
    apr_time_t start,           /* Start of connection */
               connect,         /* Connected, start writing */
               endwrite,        /* Request written */
               beginread,       /* First byte of input */
               done;            /* Connection closed */
    ....
};

struct data {
    apr_time_t starttime;         /* start time of connection */
    apr_interval_time_t waittime; /* between request and reading response */
    apr_interval_time_t ctime;    /* time to connect */
    apr_interval_time_t time;     /* time for connection */
};
看注释应该就能明白了,由connection这个结构体,计算出data结构体,data的值就是最终输出的值

Connect = data.ctime

Processing = data.time - data.ctime

Waiting = data.waittime

Total = data.time

data中的各个字段计算方式如下

data.starttime = connection.start

data.waittime = connection.beginread  - beginread .endwrite

data.ctime = connection.connect - connection.start

data.time = connection.done - connection.start

到这里就可以明显的看出来Total = Connect  + Processing ,而Waiting 是怎么计算出来的呢?看这句源码

s->waittime  = ap_max(0, c->beginread - c->endwrite);

就是说Waiting是connection这个结构体中beginread减去endwrite,这代表什么?从写入完成到读取第一个字符,这就是 往返链路时间 + 服务端运行时间 + 缓冲区等待时间,前面的好理解,那这个缓冲区等待时间是啥呢?原来内核中有读/写缓冲区,我们调用socket进行write,这个函数执行完数据并不一定已经发送到服务端,而是从用户空间拷贝到了"写缓冲区",当发送完毕后再从缓冲区删除。相应的,服务端返回的数据也会首先储存在"读缓冲区",当应用程序拷贝到用户空间后,才从缓冲区删除。而Waiting和Processing 的时间只相差一个ab读取数据的时间,因此在局域网环境下数据量不大时两者相差可能很小。

因此,ab的输出结果可以这样解释

Connect :socket链路建立消耗,代表网络状况好坏

Processing :写入缓冲区消耗+链路消耗+服务端消耗

Waiting :写入缓冲区消耗+链路消耗+服务端消耗+读取数据消耗

Total :单个事务总时间

至此,ab输出结果的来龙去脉解释清楚。


但是ab这样的测试工具有一个最大的问题,就是测试工具本身对测试结果构成影响,特别是设置的并发数较高时,可能测的是ab的性能而不是服务端的性能。正是观察者效应,观察者本身对观察结果构成影响。

© 著作权归作者所有

共有 人打赏支持
lubia

lubia

粉丝 7
博文 7
码字总数 6889
作品 1
朝阳
加载中

评论(1)

sealinger
sealinger
"Processing :写入缓冲区消耗+链路消耗+服务端消耗
Waiting :写入缓冲区消耗+链路消耗+服务端消耗+读取数据消耗
"

撸主,感觉最后写反了啊。。。1
Golang实现的高性能HTTP负载工具

Sniper Sniper是一个功能强大、高性能的HTTP负载工具,采用Golang编写。利用协程并发优势,实现海量并发、超低内存占用、丰富图表展示。是测试、分析、优化服务端性能的绝佳助手! 体验 提供以...

lubia
2013/11/19
0
0
服务器压力测试工具

目录 ab http_load webbench Siege ab 安装 是 自带的一款功能强大的测试工具,安装了 一般就自带了 测试 缺陷 程序中有各种静态声明的固定长度的缓冲区。 另外,对命令行参数、服务器的响应...

好铁
2016/08/28
36
0
数据库中间件 MyCAT源码分析:【单库单表】查询【推荐阅读】

🙂🙂🙂关注微信公众号:【芋艿的后端小屋】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码...

芋道源码掘金Java群217878901
2017/08/09
0
0
Mybatis3.4.x技术内幕(十六):Mybatis之sqlFragment(可复用的sql片段)

Mybatis目前最新版本为3.4.0,因此,我也将我的项目由3.3.1替换为3.4.0。在上一篇博文中,详细分析了Mybatis在使用foreach循环进行批量insert,返回主键id列表时,如果使用BatchExecutor,那...

祖大俊
2016/06/05
998
0
数据库中间件 MyCAT源码分析:【单库单表】插入【推荐阅读】

🙂🙂🙂关注微信公众号:【芋艿的后端小屋】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码...

芋道源码掘金Java群217878901
2017/08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSX | SafariBookmarksSyncAgent意外退出解决方法

1. 启动系统, 按住⌘-R不松手2. 在实用工具(Utilities)下打开终端,输入csrutil disable, 然后回车; 你就看到提示系统完整性保护(SIP: System Integrity Protection)已禁用3. 输入reboot回车...

云迹
今天
4
0
面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
今天
4
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
今天
4
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
今天
5
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部