900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > docker搭建并使用AB(apache bench)测试工具压力测试

docker搭建并使用AB(apache bench)测试工具压力测试

时间:2020-03-17 12:29:43

相关推荐

docker搭建并使用AB(apache bench)测试工具压力测试

构建镜像

构建镜像准备:

了解alpine:

Alpine Linux 是一个社区开发的面向安全应用的轻量级Linux发行版

构建的Alpine基础镜像的大小为6M 左右 …特点就是小 比咱们使用的linux小20倍左右…

准备Dockerfile

FROM alpineRUN apk update\&& apk add apache2-utils \&& rm -rf /var/cache/apk/*

Apache Bench本身就是apache2-utils包中的一个工具,所以只需要在Alpine中执行apk add apache2-utils即可完成Apache Bench的镜像化

构建命令

docker build -t apachebench:v1 .

-t: 代表使用当前目录

-f使用指定目录 例如:docker build -f /xx/xx/Dockerfile apachebench:v1 .

如果遇到异常:error checking context: ‘file (’/proc/758/fd/7’) not found or excluded by .dockerignore’.

就在当前这个目录下创建 .dockerignore 文件 里面写入* (具体也不知道啥原因,网上是这样的解决方案,有知道的给我留言哈哈)

echo ‘*’ >> .dockerignore

再重新执行构建就可以了.

测试使用

启动容器

docker run -it --rm apachebench:v1

exit; 退出

-i: 交互式操作。

-t: 终端。

使用–rm ,容器将在退出时自动删除。

执行命令

ab -n 1000 -c 100 http://localhost:8088/

如果带参数请把"" 起来.否则无法识别到第二个及以后参数

ab -n 1000 -c 100 “http://localhost:8088?a=a&b=b”

-n: 测试执行总次数

-c: 并行度,类似JMeter中的线程组和LR中的Virtual User

Usage: ab [options] [http[s]://]hostname[:port]/path用法:ab [选项] 地址选项:Options are:-n requests #执行的请求数,即一共发起多少请求。-c concurrency #请求并发数。-t timelimit #测试所进行的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。-s timeout #指定每个请求的超时时间,默认是30秒。-b windowsize #指定tcp窗口的大小,单位是字节。-B address #指定在发起连接时绑定的ip地址是什么。-p postfile #指定要POST的文件,同时要设置-T参数。-u putfile #指定要PUT的文件,同时要设置-T参数。-T content-type #指定使用POST或PUT上传文本时的文本类型,默认是'text/plain'。-v verbosity #设置详细模式等级。-w #将结果输出到html的表中。-i #使用HEAD方式代替GET发起请求。-y attributes #以表格方式输出时,设置html表格tr属性。 -z attributes #以表格方式输出时,设置html表格th或td属性。-C attribute #添加cookie,比如'Apache=1234'。(可重复)-H attribute #为请求追加一个额外的头部,比如'Accept-Encoding: gzip'。(可重复)-A attribute #对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。-P attribute #对一个中转代理提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。-X proxy:port #指定代理服务器的IP和端口。-V #打印版本信息。-k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。-d #不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。-q #如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。-g filename#把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。-e filename#产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。-r #当收到错误时不要退出。-h #输出帮助信息-Z ciphersuite 指定SSL/TLS密码套件-f protocol指定SSL/TLS协议(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

结果说明:

Completed 100 requests 完成100个请求Completed 200 requestsCompleted 300 requestsCompleted 400 requestsCompleted 500 requestsCompleted 600 requestsCompleted 700 requestsCompleted 800 requestsCompleted 900 requestsCompleted 1000 requestsFinished 1000 requests 完成1000个请求--请求信息Server Software: Server Hostname: 127.0.0.1 Server Port: 8021Document Path:/send?type=TOPICDocument Length: 95 bytesConcurrency Level:100 #并发数Time taken for tests: 0.565 seconds#测试所需的时间Complete requests:1000 #请求次数Failed requests: 0 #失败次数Non-2xx responses:1000 #如果接收到的HTTP响应数据的头信息中含有2XX以外的状态码Total transferred:200000 bytes# 所有请求的响应数据总和(数据正文+Header信息)HTML transferred: 95000 bytes#所有请求的数据正文数据总和Requests per second: 1771.19 [#/sec] (mean)#吞吐量,平均每秒完成的请求数Time per request: 56.459 [ms] (mean)#平均每个请求所花时间 (用户平均等待时间)Time per request: 0.565 [ms] (mean, across all concurrent requests) #用户平均等待时间=Transfer rate:345.94 [Kbytes/sec] received #传输率(单位时间从服务器获取的数据长度)Connection Times (ms) min mean[+/-sd] median maxConnect: 3 5 0.55 6Processing:5 48 31.645124Waiting: 5 43 30.838120Total:9 53 31.650129这几行组成的表格主要是针对响应时间也就是第一个Time per request进行细分和统计。一个请求的响应时间可以分成网络链接(Connect),系统处理(Processing)和等待(Waiting)三个部分。表中min表示最小值; mean表示平均值;[+/-sd]表示标准差(Standard Deviation) ,也称均方差(mean square error),这个概念在中学的数学课上学过,表示数据的离散程度,数值越大表示数据越分散,系统响应时间越不稳定。 median表示中位数; max当然就是表示最大值了。需要注意的是表中的Total并不等于前三行数据相加,因为前三行的数据并不是在同一个请求中采集到的,可能某个请求的网络延迟最短,但是系统处理时间又是最长的呢。所以Total是从整个请求所需要的时间的角度来统计的。这里可以看到最慢的一个请求花费了129ms,这个数据可以在下面的表中得到验证。Percentage of the requests served within a certain time (ms) #在一定时间内处理的请求的百分比50%50#50%请求的时间都在50ms内完成66%7275%8380%8490%9695% 10598% 11599% 119100% 129 (longest request) #全部请求的时间都在129ms内完成

注释

结果关联关系(网上找的)

RPS(吞吐量)公式:

Requests per second = Complete requests / Time taken for tests = 1000 / 0.591 = 1692 (近似等于1693)

Time per request公式:

Time per request = Time taken for tests / (Complete requests / Concurrency Level)= 0.591 / 10 = 0.0591s = 59.1 ms

Time per request(mean, across all concurrent requests)公式:

Time per request(mean, across all concurrent requests) = Time taken for tests / Complete requests = 0.591 / 1000 = 0.000591s = 0.591ms

Transfer rate公式:

Transfer rate = Total transferred / Time taken for tests = 845000 / 0.591= 1429780.034 = 1429.78 kb/s(近似等于1397.07)

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