Apache ab -- 工具简介

1. ab命令原理

  • Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx、lighthttp、IIS等其它Web服务器的压力。
  • ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载,因此是某些DDOS攻击之必备良药,老少皆宜。
  • 在带宽不足的情况下,最好是本机进行测试,建议使用内网的另一台或者多台服务器通过内网进行测试。远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大或带宽不足)

2. 用法

2.1 环境配置

  • 下载安装教程https://jingyan.baidu.com/article/29697b912f6539ab20de3cf8.html
  • 测试:ab目录下cmd输入ab -V ,显示ab命令详解页面

2.2 命令参数详解

ab --help查看命令行详解
    -n:-n在测试会话中所执行的请求个数
    -c:并发数
    -t:测试持续多长时间(一般与-n参数2选1)
    -p:包含了需要POST的数据的文件
    -T:POST数据所使用的Content-type头信息
    -C:对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复
    -w:生成html格式报告、
    
    get请求:ab -n 20 -c 10 -w https://online1.chime.me/user/get-user   //get请求,并生成HTML格式报告
    post请求:使用ab命令进行压测:ab -n 2 -c 2 -p C:/Users/Administrator/Desktop/jmx/ab/NewSite_data.txt -T application/json;charset=utf-8 https://tools.chime.me/api-code

2.3 结果分析

his is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
//以上为apache的版本信息,与本次测试无关

Benchmarking online1.chime.me (be patient).....done  
//以上内容显示测试完成度,本次测试发起请求数量较少,完成较快,无中间过程显示。在请求数量很多时会分行显示当前完成数量。


Server Software:        nginx/1.10.2
Server Hostname:        online1.chime.me
Server Port:            443     //被测主机的服务端口号,一般http请求的默认端口号是80,https默认使用443端口
SSL/TLS Protocol:       TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128   //加密协议

Document Path:          /user/get-user
Document Length:        169 bytes

Concurrency Level:      10       //并发级别,也就是并发数,请求中-c参数指定的数量
Time taken for tests:   0.056 seconds   //本次测试总共花费的时间
Complete requests:      20           // 总请求书
Failed requests:        0           // 失败的请求数
Write errors:           0
Non-2xx responses:      20
Total transferred:      6380 bytes  // 从服务端接受的文件总大小
HTML transferred:       3380 bytes
Requests per second:    357.32 [#/sec] (mean)   
// 平均(mean)每秒完成的请求数:QPS,这是一个平均值,等于Complete requests/Time taken for tests
Time per request:       27.986 [ms] (mean)    
//从用户角度看,完成一个请求所需要的时间(因用户数量不止一个,服务器完成10个请求,平均每个用户才接收到一个完整的返回,所以该值是下一项数值的10倍。)
Time per request:       2.799 [ms] (mean, across all concurrent requests)  
// 服务器完成一个请求的时间。
Transfer rate:          111.31 [Kbytes/sec] received   
//网络传输速度。对于大文件的请求测试,这个值很容易成为系统瓶颈所在。要确定该值是不是瓶颈,需要了解客户端和被测服务器之间的网络情况,包括网络带宽和网卡速度等信息。

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        6   14   3.4     13      19
Processing:     2    6   3.8      4      14
Waiting:        1    4   2.2      3      10
Total:          9   19   5.2     18      30
//这几行组成的表格主要是针对响应时间也就是第一个Time per request进行细分和统计。一个请求的响应时间可以分成网络链接(Connect),系统处理(Processing)和等待(Waiting)三个部分。表中min表示最小值; mean表示平均值;[+/-sd]表示标准差(Standard Deviation) ,也称均方差(mean square error),这个概念在中学的数学课上学过,表示数据的离散程度,数值越大表示数据越分散,系统响应时间越不稳定。 median表示中位数; max当然就是表示最大值了。

//需要注意的是表中的Total并不等于前三行数据相加,因为前三行的数据并不是在同一个请求中采集到的,可能某个请求的网络延迟最短,但是系统处理时间又是最长的呢。所以Total是从整个请求所需要的时间的角度来统计的。这里可以看到最慢的一个请求花费了195ms,这个数据可以在下面的表中得到验证。
Percentage of the requests served within a certain time (ms)
  50%     18
  66%     21
  75%     24
  80%     24
  90%     27
  95%     30
  98%     30
  99%     30
 100%     30 (longest request)

//可理解为50%的用户小于18ms,90%的用户小于27ms。

2.4 error原因

  • ab error判断规则
  • Connect 无法送出要求、目标主机连接失败、要求的过程中联机被中断
  • Length 响应的内容长度不一致 ( 以 Content-Length 标头值为判断依据 ),动态页面由于长度不一致的问题也会报error
  • Exception 发生无法预期的错误
  • 设计原因
  • 防爬虫等,屏蔽了apache等非浏览器端请求,默认返回403。此时需要添加本地压测环境白名

3. 与jemeter比较

  • jmeter是一次完整的请求和返回, 而AB只是发出去请求,并不对返回做处理,只是请求发送成功或者失败。 【特别是返回数据量比较大的接口,两者的TPS差距更大】
  • Jmeter支持可变参数和CSV数据集的输入,能设定更加负责的测试样例,而AB不需要写配置文件。
  • Jmeter可以提供更加详细的统计结果数据,比如某个线程(某个case)请求时间是多长,返回结果是多少,以及错误信息等。而AB则不支持。
  • Jmeter支持分布式的压测集群,且支持函数。
  • 软件自身耗费资源:Jmeter由于比较重,且统计了很多结果数据,比AB耗时耗费资源多。AB属于轻量级。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值