性能测试工具AB
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需注意,一次上太多的负载可能造成目标服务器因资源耗完,严重时甚至导致死机。
二、ab的安装
只要安装了Apache,就能够在Apache的安装目录中找到它,地址在Apache安装目录/bin/ab.exe
。
使用之前先学习一下ab的用法。
首先,cd到Apache的安装目录/bin/
。
命令ab -help
(或者ab /?
、ab -h
),可以看到如下的用法介绍界面:
1 Usage: ab [options] [http[s]://]hostname[:port]/path
2 用法:ab [选项] 地址
3
4 选项:
5 Options are:
6 -n requests #执行的请求数,即一共发起多少请求。
7 -c concurrency #请求并发数。
8 -t timelimit #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
9 -s timeout #指定每个请求的超时时间,默认是30秒。
10 -b windowsize #指定tcp窗口的大小,单位是字节。
11 -B address #指定在发起连接时绑定的ip地址是什么。
12 -p postfile #指定要POST的文件,同时要设置-T参数。
13 -u putfile #指定要PUT的文件,同时要设置-T参数。
14 -T content-type #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。
15 -v verbosity #设置详细模式等级。
16 -w #将结果输出到html的表中。
17 -i #使用HEAD方式代替GET发起请求。
18 -y attributes #以表格方式输出时,设置html表格tr属性。
19 -z attributes #以表格方式输出时,设置html表格th或td属性。
20 -C attribute #添加cookie,比如'Apache=1234'。(可重复)
21 -H attribute #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)
22 -A attribute #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
23 -P attribute #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
24 -X proxy:port #指定代理服务器的IP和端口。
25 -V #打印版本信息。
26 -k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
27 -d #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
28 -q #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。
29 -g filename #把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。
30 -e filename #产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。
31 -r #当收到错误时不要退出。
32 -h #输出帮助信息
33 -Z ciphersuite 指定SSL/TLS密码套件
34 -f protocol 指定SSL/TLS协议(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
安装ab的windows版
地址:http://httpd.apache.org/
----------------------------------------
--------------------------------------
三、ab的使用
虽然ab可以配置的参数选项比较多,但是,一般情况下只需要使用形如ab -n 数字 -c 数字 url路径
的命令即可。比如,对网易云课堂进行压力测试。测试总次数为1000,并发数为10(相当于10个用户同时访问,他们总共访问1000次)。
ab -n1000 -c10 http://study.163.com/
F:\Apache24\bin>ab -n100 -c10 http://study.163.com/ This is ApacheBench, Version 2.3 <$Revision: 1826891 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking study.163.com (be patient).....done Server Software: nginx #被测试服务器软件名称 Server Hostname: study.163.com #服务器主机名 Server Port: 80 #服务器端口 Document Path: / #请求的URL中的根绝对路径 Document Length: 314180 bytes #页面的大小 Concurrency Level: 10 #并发数 Time taken for tests: 5.020 seconds #整个测试耗时 Complete requests: 100 #总共完成的请求数量 Failed requests: 99 #失败数99(可能除了第一次剩下的99次全部错误。网易云课堂应该是对同一ip大量多次快速的访问做了限制) (Connect: 0, Receive: 0, Length: 99, Exceptions: 0) Total transferred: 31473840 bytes #测试过程中产生的网络传输总量 HTML transferred: 31411340 bytes #测试过程中产生的HTML传输量 Requests per second: 19.92 [#/sec] (mean) #表示服务器吞吐量,每秒事务数,括号中的 mean 表示这是一个平均值 Time per request: 502.031 [ms] (mean) #表示用户请求的平均响应时间,后面括号中的mean表示这是一个平均值 Time per request: 50.203 [ms] (mean, across all concurrent requests) #表示服务器请求平均处理时间,即实际运行时间的平均值 Transfer rate: 6122.37 [Kbytes/sec] received #表示这些请求在单位时间内从服务器获取的数据长度,可以帮助排除是否存在网络流量过大导致响应时间延长的问题 Connection Times (ms) #min最小值、mean平均值、[+/-sd]方差、median中位数、maxz最大值 min mean[+/-sd] median max Connect: 20 24 2.6 25 32 #socket链路建立消耗,代表网络状况好 Processing: 260 436 80.5 430 614 #写入缓冲区消耗+链路消耗+服务器消耗 Waiting: 55 81 24.1 75 200 #写入缓冲区消耗+链路消耗+服务器消耗+读取数据消耗 Total: 288 461 80.0 455 636 #单个事务总时间 #网络上消耗的时间的分解,表示这些请求在单位时间内从服务器获取的数据长度 Percentage of the requests served within a certain time (ms) 50% 455 66% 500 75% 534 80% 548 90% 565 95% 581 98% 609 99% 636 100% 636 (longest request)
# 整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于455毫秒,60%的用户响应时间小于500毫秒,最大的响应时间小于636毫秒
总结
1.ab 判断成功与否知识判断2xx 响应码,不接收服务器的返回值,所以同样的响应ab测试支持的并发数大于LR和Jemter,TPS的 响应值也会比较大
2.ab运行的测试并发数与ab所运行的机器的cpu的颗粒度有很大的关系,cpu颗粒度越大,测试结果支持的并发数越大
3.ab适合测试HTTP协议的URL的连接并发,特别是Web系统的首页
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2018-01-18 Python统计安卓log中Anr、Crash出现的数量