之前做性能调试的时候一直用的JMeter压测,最近发现一款简单易用的压力测试工具。 ab(Apache benchmark)是一款常用的压力测试工具,是Apache附带的一个小工具 , 专门用于HTTP Server的benchmark testing,可以同时模拟多个并发请求。

v基础知识

ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

先介绍几个性能指标。

吞吐率:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。

并发连接数:某一时刻服务器所接受的请求数(会话数)。

并发用户数:某一时刻服务器所接受的连接数,一个用户可能同时产生多个连接。

用户平均请求等待时间:总请求数 / 并发用户数。

服务器平均请求等待时间:处理完成所有请求数所花费的时间 / 总请求数。

PV: 即page view,页面浏览量,用户每一次对网站中的每个页面访问均被记录1次。用户对同一页面的多次刷新,访问量累计。

UV:即Unique visitor,独立访客,通过客户端的cookies实现。即同一页面,客户端多次点击只计算一次,访问量不累计。

IP: 即Internet Protocol,本意本是指网络协议,在数据统计这块指通过ip的访问量。即同一页面,客户端使用同一个IP访问多次只计算一次,访问量不累计。

TPS:即Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。

QPS:即Queries Per Second的缩写,每秒能处理查询数目。是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。QPS=并发量 / 平均响应时间

RPS:即Requests Per Second的缩写,每秒能处理的请求数目。等效于QPS

vWindows安装ab test

1.1 下载地址

https://www.apachehaus.com/cgi-bin/download.plx

1.2 解压

用CMD命令行打开解压后的bin目录路径。

1.3 测试

ab -n 100 -c 10 http://toutou.com:8301/user/get?uid=1

-n 表示请求数,-c 表示并发数. -t 表示多少s内并发和请求

上面的命令测试总次数为100,并发数为10(相当于10个用户同时访问,他们总共访问100次)。

在解析返回结果之前,我们先来看看如果宿主机由Windows换成Linux后,如何在Linux上使用ab test。

vLinux安装ab test

2.1 安装ab test

yum -y install httpd-tools

ab -V

2.2 测试

v参数/返回结果

3.1 参数

用法:ab [选项] 地址

Usage: ab [options] [http[s]://]hostname[:port]/path

-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)

3.2 返回结果

以上文中Linux ab test的结果集为例:

[root@localhost ~]# ab -n 100 -c 10 http://toutou.com:8301/user/get?uid=1
This 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/ Benchmarking toutou.com (be patient).....done #测试服务器的名字
Server Software:
#请求的URL主机名
Server Hostname: toutou.com
#web服务器监听的端口
Server Port: 8301 #请求的URL中的根绝对路径
Document Path: /user/get?uid=1
#HTTP响应数据的正文长度
Document Length: 131 bytes # 并发用户数,这是ab命令中设置的-c参数
Concurrency Level: 10
#所有这些请求被处理完成所花费的总时间
Time taken for tests: 1.274 seconds
# 总请求数量,这是ab命令中设置的-n参数
Complete requests: 100
# 失败的请求数,这里的失败是指请求的连接服务器、发送数据、接收数据等环节发生异常,以及无响应后超时的情况。对于超时时间的设置可以用ab的-t参数。如果接受到的http响应数据的头信息中含有2xx以外的状态码,则会在测试结果显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算是失败的请求。
Failed requests: 0
#写入错误
Write errors: 0
# 总的网络传输量(字节数),包含http的头信息等。使用ab的-v参数即可查看详细的http头信息。
Total transferred: 25000 bytes
# HTML内容传输量,实际的页面传递字节数。也就是减去了Total transferred中http响应数据中头信息的长度。
HTML transferred: 13100 bytes
# 每秒处理的请求数,服务器的吞吐量,等于:Complete requests / Time taken for tests(QPS)
Requests per second: 78.48 [#/sec] (mean)
# 用户平均请求等待时间
Time per request: 127.425 [ms] (mean)
# 服务器平均处理时间
Time per request: 12.743 [ms] (mean, across all concurrent requests)
# 平均每秒网络上的流量,即每秒收到的速率
Transfer rate: 19.16 [Kbytes/sec] received # 压力测试时的连接处理时间。-- min最小值、mean平均值、[+/-sd]方差、median中位数、maxz最大值
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.3 0 1 # socket链路建立消耗,代表网络状况好
Processing: 20 121 54.9 119 281 # 写入缓冲区消耗+链路消耗+服务器消耗
Waiting: 13 99 48.7 93 234 # 写入缓冲区消耗+链路消耗+服务器消耗+读取数据消耗
Total: 21 122 54.8 119 281 # 单个事务总时间
ERROR: The median and mean for the initial connection time are more than twice the standard
deviation apart. These results are NOT reliable. Percentage of the requests served within a certain time (ms)
50% 119
66% 141
75% 148
80% 159
90% 201
95% 232
98% 268
99% 281
100% 281 (longest request)
# 整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于119毫秒,66%的用户响应时间小于141毫秒,最大的响应时间小于281毫秒

3.3 从上面的返回结果可以得出以下数据:

1.整个测试持续的时间:1.274s

2.完成的请求数:1000

3.失败的请求数:0

4.总的网络传输量(字节数):25000 bytes

5.HTML内容传输量:13100 bytes

6.服务器的吞吐量:78.48 (QPS的稳定值应取决于失败请求为0时支持的最高并发)

7.用户平均请求等待时间:127.425ms

8.服务器平均处理时间:12.743ms

9.平均每秒网络上的流量: 19.16kb

10.99%的用户响应时间小于181ms

v遇到的问题

4.1.1: 错误描述

apr_socket_recv: Connection reset by peer (104)
Total of 2513 requests completed

4.1.2: 解决方案

这个参数的意思是当出现“receive error”,即接收数据错误时是否退出,默认是退出的,所以会出现上述的问题,在参数中加入 -r 参数即可。

4.2.1: 错误描述

Benchmarking toutou.com (be patient)
socket: Too many open files (24)

4.2.2: 解决方案

调整可以打开的文件数: ulimit -n 65535

v博客总结

1.ab判断成功与否知识判断 2xx 响应码,不接收服务器的返回值,所以同样的响应ab测试支持的并发数大于LR和Jemter,TPS的响应值也会比较大

2.ab运行的测试并发数与ab所运行的机器的cpu的颗粒度有很大的关系,cpu颗粒度越大,测试结果支持的并发数越大

3.ab不像LR或Jemter那么强大,但是它足够轻便,如果只是在开发过程中想检查一下某个模块的响应情况,或者做一些场景比较简单的测试,ab还是一个不错的选择。

其他参考/学习资料:

v源码地址

https://github.com/toutouge/javademosecond/tree/master/hellospringboot

作  者:请叫我头头哥


出  处:http://www.cnblogs.com/toutou/


关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!


版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。


特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信


声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!

#comment_body_3242240 { display: none }

ab test压力测试的更多相关文章

  1. kubernetes:基于ab的压力测试

    基于ab的压力测试 # cat apache-test.yaml ################################################################### ...

  2. 使用ab进行压力测试详解

    ab是apache自带的压力测试工具,非常好用.转载几篇对ab工具的详细使用的博文.猛击下面的链接地址 http://www.365mini.com/page/apache-benchmark.htm ...

  3. 网站appache的ab命令压力测试性能

    ①:相关不错的博文链接:http://johnnyhg.iteye.com/blog/523818 ②:首先配置好对应的环境上去,有对应的命令 ③:压力测试的指令如下: 1. 最基本的关心两个选项 - ...

  4. ab网站压力测试

    ab网站压力测试命令的参数.输出结果的中文注解    permalink 以前安装好APACHE总是不知道该如何测试APACHE的性能,现在总算找到一个测试工具了.就是APACHE自带的测试工具AB( ...

  5. 使用Apache ab进行压力测试(参数说明)

    我们一般会使用Apache自带的ab来对项目进行压力测试,看项目的执行情况如何. 我们可以使用 ab -v 来查看ab的详细参数使用方法. [root@node234 bin]# ./ab -v ab ...

  6. ab做压力测试

    ab是apache 自带的一个压力测试的小工具,可用于接口简单的压力测试. 以下是AB的简要介绍 格式:ab [options] [http://]hostname[:port]/path 参数说明: ...

  7. ubuntu下 使用AB做压力测试

    1最近刚开始接触apache大数据下数据优化,讲一下apache 下ab压力测试工具. 程序“ab”尚未安装. 您可以使用以下命令安装: apt-get install apache2-utils 以 ...

  8. 使用Apache的ab进行压力测试

    概述 ab是apache自带的压力测试工具,当安装完apache的时候,就可以在bin下面找到ab然后进行apache 负载压力测试. 后台测试开发中,常用的压力测试服务,php一般选择xampp,下 ...

  9. ab 站点压力测试工具

    ab--压力测试工具 前端时间由于需要测试一个网站的高并发的情况,使用到了一个ab测试工具,下面是我自己的体验及参考网上别人的博客所写,希望对大家有所帮助. ab工具简介 ab 全称:apache b ...

  10. Linux学习13-CentOS安装ab做压力测试

    前言 网站性能压力测试是服务器网站性能调优过程中必不可缺少的一,测试环境准备好了后,如何对网站做压力测试? 压力测试的工具很多,如:ab.http_load.webbench.siege.jmeter ...

随机推荐

  1. 源码分析:升级版的读写锁 StampedLock

    简介 StampedLock 是JDK1.8 开始提供的一种锁, 是对之前介绍的读写锁 ReentrantReadWriteLock 的功能增强.StampedLock 有三种模式:Writing(读 ...

  2. 想换4K显示器了?那你搞懂啥是4K了吗?

    前言 我们在科技资讯以及电脑显示器.数字电视等电子产品的宣传语中,经常能够看见4K的字样.最近,B站(哔哩哔哩)升级了HTML5播放器和视频云等相关服务,为广大用户提供了超高清(UHD: Ultra ...

  3. kali 系列学习07-攻击之密码生成

    比较理想的字典是拖库字典,比如CSDN字典,如果要生成字典,可以使用Crunch 和 rtgen 两个工具, 一.密码生成 1.Crunch (1)启动crunch命令.执行命令如下所示. #crun ...

  4. 死磕以太坊源码分析之p2p节点发现

    死磕以太坊源码分析之p2p节点发现 在阅读节点发现源码之前必须要理解kadmilia算法,可以参考:KAD算法详解. 节点发现概述 节点发现,使本地节点得知其他节点的信息,进而加入到p2p网络中. 以 ...

  5. vue项目中echarts属性总结

    <div id="echarts" style="width: 600px;height: 400px;margin-top: 100px;margin-left: ...

  6. 巧妙使用MathType快速编写数学函数公式

    在我们日常的工作与学习中,你是否也会遇到过无法在电脑中编写数学函数公式的情况呢? 简单的数学函数公式或许经过我们不懈的努力也可以成功的编写,不过这会耽误我们大把的时间. 想象一下,假如你的老板急着催你 ...

  7. 区块链V1版本实现之二

    部分程序代码(生成并调用hash代码): 1 //创建区块,对Block的每一个字段填充数据 2 func NewBlock(data string, prevBlockHash []byte) *B ...

  8. 软件工程与UML第三次作业

    博客班级 软件工程与UML2班 作业要求 本次作业要求 作业目标 <给至少5名同学提他的代码issue并用博客记录;根据收到的issue修改自己的代码> 作业源代码 我的码云仓库 学号 & ...

  9. IDEA社区版(Community)和付费版(UItimate)的区别

    比对类型 Ultimate(终极版,付费) Community(社区版,免费) 语言支持 Java Java Groovy Groovy Kotlin Kotlin Scala(通过插件) Scala ...

  10. charles功能(二)修改response请求参数

    1.接口处 鼠标右击,选择breakpoints(允许本接口使用breakpionts功能) 2.开始设置断点值 4.重新请求接口(charles的界面变为可编辑状态),修改请求参数,执行请求 5.最 ...