[752]压力测试工具-ab工具

2023-11-13

在学习ab工具之前,我们需了解几个关于压力测试的概念

  1. 吞吐率(Requests per second)

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

计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests

  1. 并发连接数(The number of concurrent connections)

概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。

  1. 并发用户数(The number of concurrent users,Concurrency Level)

概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。

  1. 用户平均请求等待时间(Time per request)

计算公式:处理完成所有请求数所花费的时间/(总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)

  1. 服务器平均请求等待时间(Time per request: across all concurrent requests)

计算公式:处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests。可以看到,它是吞吐率的倒数,同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level。

ab工具简介

ab全称为:apache bench

  • 在官网上的解释如下:

ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。

  • 其他网站解释:

ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。

下载ab工具

Window官方下载地址:https://www.apachehaus.com/cgi-bin/download.plx

下载完成后解压,修改解压根目录下的conf/httpd.conf文件的端口配置,默认是80端口,应该是被占用了,无法安装,可以自行修改为其他,我在这里修改为8088端口,然后输入命令安装:httpd -k install

启动ab工具

如果你需要在命令行的任意路径下可以输入ab测试,可以把bin目录路径加到环境变量的path中去,我是在bin目录下打开命令行的

开始测试

输入命令ab -n 100 -c 10 http://test.com/
其中-n表示请求数,-c表示并发数

其余命令请参见 http://apache.jz123.cn/programs/ab.html

ab参数说明

有关 ab 命令的使用,我们可以通过帮助命令进行查看。如下:

[root@localhost bin]# ab --help
ab: wrong number of arguments
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make at a time
    -t timelimit    Seconds to max. to spend on benchmarking
                    This implies -n 50000
    -s timeout      Seconds to max. wait for each response
                    Default is 30 seconds
    -b windowsize   Size of TCP send/receive buffer, in bytes
    -B address      Address to bind to when making outgoing connections
    -p postfile     File containing data to POST. Remember also to set -T
    -u putfile      File containing data to PUT. Remember also to set -T
    -T content-type Content-type header to use for POST/PUT data, eg.
                    'application/x-www-form-urlencoded'
                    Default is 'text/plain'
    -v verbosity    How much troubleshooting info to print
    -w              Print out results in HTML tables
    -i              Use HEAD instead of GET
    -x attributes   String to insert as table attributes
    -y attributes   String to insert as tr attributes
    -z attributes   String to insert as td or th attributes
    -C attribute    Add cookie, eg. 'Apache=1234'. (repeatable)
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
    -A attribute    Add Basic WWW Authentication, the attributes
                    are a colon separated username and password.
    -P attribute    Add Basic Proxy Authentication, the attributes
                    are a colon separated username and password.
    -X proxy:port   Proxyserver and port number to use
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -d              Do not show percentiles served table.
    -S              Do not show confidence estimators and warnings.
    -q              Do not show progress when doing more than 150 requests
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -r              Don't exit on socket receive errors.
    -h              Display usage information (this message)
    -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)
    -f protocol     Specify SSL/TLS protocol
                    (SSL3, TLS1, TLS1.1, TLS1.2 or ALL)

下面我们对这些参数,进行相关说明。如下:

参数 说明
-n 在测试会话中所执行的请求个数。默认时,仅执行一个请求。
-c 一次产生的请求个数。默认是一次一个。
-t 测试所进行的最大秒数。其内部隐含值是 -n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-p 包含了需要 POST 的数据的文件。
-P 对一个中转代理提供 BASIC 认证信任。用户名和密码由一个:隔开,并以 base64 编码形式发送。无论服务器是否需要(即, 是否发送了 401 认证需求代码),此字符串都会被发送。
-T POST数据所使用的 Content-type 头信息。
-v 设置显示信息的详细程度 -4 或更大值会显示头信息,3 或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。
-V 显示版本号并退出。
-w 以 HTML 表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-i 执行 HEAD 请求,而不是 GET。
-X 对请求使用代理服务器。
-x 设置 属性的字符串。
-y 设置
-z 设置 属性的字符串。
-C 对请求附加一个 Cookie 行。其典型形式是 name=value 的一个参数对,此参数可以重复。
-H 对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,“Accept-Encoding:zip/zop;8bit”)。
-A 对服务器提供 BASIC 认证信任。用户名和密码由一个:隔开,并以 base64 编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
-h 显示使用方法。
-d 不显示 “percentage served within XX [ms] table” 的消息(为以前的版本提供支持)。
-e 产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比 gnuplot 格式更有用。
-g 把所有测试结果写入一个 gnuplot 或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor 甚至 Excel 中。其中的第一行为标题。
-k 启用 HTTP KeepAlive 功能,即在一个 HTTP 会话中执行多个请求。默认时,不启用 KeepAlive 功能。
-q 如果处理的请求数大于 150,ab 每处理大约 10% 或者 100 个请求时,会在 stderr 输出一个进度计数。此 -q 标记可以抑制这些信息。
属性的字符串。

测试结果分析

上面的命令运行完毕后就出来测试报告了

image.png

这段展示的是web服务器的信息,可以看到服务器采用的是nginx,域名是wan.bigertech.com,端口是80

image

这段是关于请求的文档的相关信息,所在位置“/”,文档的大小为338436 bytes(此为http响应的正文长度)

image

这段展示了压力测试的几个重要指标

image

  • Concurrency Level: 100 ==>并发请求数
  • Time taken for tests: 50.872 seconds ==>整个测试持续的时间
  • Complete requests: 1000 ==>完成的请求数
  • Failed requests: 0 ==>失败的请求数
  • Total transferred: 13701482 bytes ==>整个场景中的网络传输量
  • HTML transferred: 13197000 bytes ==>整个场景中的HTML内容传输量
  • Requests per second: 19.66 [#/sec] (mean) ==>吞吐率,大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
  • Time per request: 5087.180 [ms] (mean) ==>用户平均请求等待时间,大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值
  • Time per request: 50.872 [ms] (mean, across all concurrent requests) ==>服务器平均请求处理时间,大家最关心的指标之三
  • Transfer rate: 263.02 [Kbytes/sec] received ==>平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
  • 这段表示网络上消耗的时间的分解
    image
  • 这段是每个请求处理时间的分布情况,50%的处理时间在4930ms内,66%的处理时间在5008ms内…,重要的是看**90%**的处理时间。
    image

关于登录的问题

有时候进行压力测试需要用户登录,怎么办?
请参考以下步骤:

  1. 先用账户和密码登录后,用开发者工具找到标识这个会话的Cookie值(Session ID)记下来

  2. 如果只用到一个Cookie,那么只需键入命令:
    ab -n 100 -C key=value http://test.com/
    如果需要多个Cookie,就直接设Header:
    ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/

总结

总的来说ab工具ab小巧简单,上手学习较快,可以提供需要的基本性能指标,但是没有图形化结果,不能监控。因此ab工具可以用作临时紧急任务和简单测试。

同类型的压力测试工具还有:webbench、siege、http_load等


开始测试

如果你需要在命令行的任意路径下可以输入ab测试,可以把bin目录路径加到环境变量的path中去

我是在bin目录下打开命令行的
注意,下面的是错误的,因为需要在域名后加上/path

ab -n 100 -c 10 http://www.baidu.com

报错信息如下:

ab: invalid URL
Usage: ab [options] [http://]hostname[:port]/path

必须要接有path
所以我换一下测试命令:

ab -n 100 -c 10 http://www.baidu.com/s

-n 表示请求数,-c 表示并发数.
s为path,表示指定测试地址,不指定可能会报”ab: invalid url” 错误.
另外还有-t 表示多少s内并发和请求

测试出来的数据如下:

D:\apacheab\Apache24\bin>ab -n 100 -c 10 http://www.baidu.com/s
This is ApacheBench, Version 2.3 <$Revision: 1807734 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.baidu.com (be patient).....done

Server Software:        BWS/1.1   
##服务器软件和版本
Server Hostname:        www.baidu.com  
##请求的地址/域名
Server Port:            80   
##端口

Document Path:          /s  
##请求的路径
Document Length:        112435 bytes  
##页面数据/返回的数据量

Concurrency Level:      10   
##并发数
Time taken for tests:   4.764 seconds  
##共使用了多少时间 
Complete requests:      100  
##请求数 
Failed requests:        99  
##失败请求  百度为什么失败这么多,应该是百度做了防范  
   (Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
Total transferred:      11342771 bytes  
##总共传输字节数,包含http的头信息等 
HTML transferred:       11247622 bytes  
##html字节数,实际的页面传递字节数 
Requests per second:    20.99 [#/sec] (mean) 
 ##每秒多少请求,这个是非常重要的参数数值,服务器的吞吐量 
Time per request:       476.427 [ms] (mean)   
##用户平均请求等待时间 
Time per request:       47.643 [ms] (mean, across all concurrent requests)  
##服务器平均处理时间,也就是服务器吞吐量的倒数 
Transfer rate:          2325.00 [Kbytes/sec] received
 ##每秒获取的数据长度

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       22   41  12.4     39      82
##连接的最小时间,平均值,中值,最大值
Processing:   113  386 211.1    330    1246
##处理时间
Waiting:       25   80  43.9     73     266
##等待时间
Total:        152  427 210.1    373    1283
##合计时间

Percentage of the requests served within a certain time (ms)
  50%    373   
## 50%的请求在373ms内返回 
  66%    400   
## 60%的请求在400ms内返回 
  75%    426
  80%    465
  90%    761
  95%    930
  98%   1192
  99%   1283
 100%   1283 (longest request)

因为ab工具消耗小,所以有些人也用来进行ddos攻击,算一种ddos攻击工具


[Linux]ApacheBench(ab)压力测试工具

AB的简介

ab是apachebench命令的缩写。

ab是apache自带的压力测试工具。ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等

ab的原理

ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。

ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机

ab的安装

安装命令:yum -y install httpd-tools
查看版本命令:ab -V
查看参数说明:ab --help

ab的使用
常用方式:ab -c 500 -n 5000 http://localhost/

[root@H__D /]# ab -c 500 -n 5000 http://localhost/
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 localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests


Server Software:        nginx/1.15.3        #测试服务器的名字
Server Hostname:        localhost            #请求的URL主机名
Server Port:            80                          #请求端口

Document Path:          /                        #请求路径
Document Length:        613 bytes          #HTTP响应数据的正文长度

Concurrency Level:      500                    #并发用户数,这是我们设置的参数之一
Time taken for tests:   0.407 seconds     #所有这些请求被处理完成所花费的总时间 单位秒
Complete requests:      5000                  #总请求数量,这是我们设置的参数之一
Failed requests:        0                           #表示失败的请求数量
Write errors:           0                            
Total transferred:      4230000 bytes       #所有请求的响应数据长度总和。包括每个HTTP响应数据的头信息和正文数据的长度
HTML transferred:       3065000 bytes     #所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度
Requests per second:    12284.44 [#/sec] (mean)    #吞吐量,计算公式:Complete requests/Time taken for tests  总请求数/处理完成这些请求数所花费的时间
Time per request:       40.702 [ms] (mean)             #用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数)     
Time per request:       0.081 [ms] (mean, across all concurrent requests)    #服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level
Transfer rate:          10149.06 [Kbytes/sec] received。  #表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   0.8      1       6
Processing:     3    5   7.9      5     399
Waiting:        0    4   7.9      4     399
Total:          4    7   8.0      7     404
WARNING: The median and mean for the initial connection time are not within a normal deviation
        These results are probably not that reliable.

Percentage of the requests served within a certain time (ms)
  50%      7               #50%用户请求在7ms内返回
  66%      7               #60%用户请求在7ms内返回
  75%      7
  80%      7
  90%      7
  95%      7
  98%     12              #98%用户请求在12ms内返回
  99%     12
 100%    404 (longest request)  
使用注意

1、MAC中应该是自带了Apache。

2、在使用ab命令时,并发了过高会出现错误:Too many open files,由于系统打开文件数量限制了。

image

查看系统打开文件数量,命令:ulimit -a
image

修改打开文件数量,修改成1024,命令:ulimit -n 1024

查看修改后情况,命令:ulimit -n

image

参考:https://www.cnblogs.com/behindman/p/8700611.html
https://blog.csdn.net/qq_26525215/article/details/79182674
https://www.cnblogs.com/h–d/p/9903959.html
https://www.jianshu.com/p/d222b7c80e97

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[752]压力测试工具-ab工具 的相关文章

随机推荐

  • SeleniumLibrary4.5.0 关键字详解(八)

    SeleniumLibrary4 5 0 关键字详解 八 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • Zigbee协议栈(CC2530开发板) 修改发射功率

    Zigbee协议栈 CC2530开发板 修改发射功率 2010 12 07 15 11 43 分类 Zigbee 标签 zigbee 协议栈 发射功率 字号 订阅 CC2530 控制输出功率的寄存器是 TXPOWER 推荐功率设置 协议栈默
  • 矩阵求导——Numerator Layout & Denominator Layout

    突然想起这个问题了 刚刚看到有人在问某个的公式 自己闷头想了想居然都忘的差不多了 于是乎稍微整理一下供以后参考 其实 关于矩阵求导讲的最详细的还是wiki上的页面面http en wikipedia org wiki Matrix calc
  • 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器

    1 概述 翻译 http janino compiler github io janino janino as a 20compiler Janino 是一个超小 超快的 Java 编译器 Janino不仅可以像JAVAC一样将一组源文件编
  • Echarts特殊用法总结

    最近做了一个微信公众号项目 使用Echarts绘制降雨量曲线 水库水位及库容曲线 大坝断面监测等图表 通过查阅官方文档及示例 度娘 与Echarts的距离更近了一步 总结一下 不能直接在官网上找到答案的用法 有以下几处 x轴为value类型
  • JavaScript DOM和BOM

    目录 查找html元素 1 通过id 2 通过标签名 3 通过类名 DOM 1 创建动态的HTML内容 2 修改元素内容 3 改变HTML属性 4 改变css样式 DOM事件 DOM节点 1 添加HTML元素 2 删除HTML元素 浏览器对
  • nginx学习记录(一) 认识、了解

    本文记录个人学习nginx的学习笔记 方便自己日后查看 也希望各位大佬看到有什么不对可以指点一二 一 什么是nginx 基本介绍 Nginx 是一款轻量级的 Web 服务器 反向代理服务器 电子邮件 IMAP POP3 代理服务器 在BSD
  • 使用SVG绘制带箭头的线

  • 小程序实现小窗功能

    效果图 正常情况下 正常退出直播间后 可添加官方支持的小窗展示功能 小窗使用过程中 不会影响其他界面的使用 共存状态 用户端 主播段 异常情况下 1 当长时间悬挂小窗后 或者主播网络出问题的情况下 小窗会有加载loadding 点击进入直播
  • word中插入公式实现换行和对齐

    一 准备阶段 默认Unicode模式 进入公式编辑模式 输入 eqarray 紧接着按下空格键输入空格 如下 二 实现换行和对齐 将要编辑的公式输入到括号内 实现位置对齐 实现换行 三 结束公式编辑 输入完所有公式后 输入右括号 紧接着按下
  • 漂亮的表格样式(使用CSS样式表控制表格样式)

    依照WEB2 0风格 设计了几个表格样式 希望大家喜欢 WEB2 0提倡使用div开布局 但不是要完全放弃使用表格 表格在数据展现方面还是不错的选择 现在使用介绍使用CSS样式表来控制 美化表格的方法 lt html xmlns http
  • 蓝桥杯嵌入式创建第一个工程(点亮led灯)

    蓝桥杯嵌入式创建第一个工程 点亮led灯 一 keil导入stm32G431RX板级芯片包 1 1 下载板级芯片包 1 2 导入芯片包 1 2 1 我们首先打开keil 点击Pack installer 如图 1 2 2 然后选中file
  • arm基础知识

    目录 arm基础知识 谈谈对嵌入式的理解 计算机基本理论 计算机的组成 指令的解析 编译原理 ARM相关知识介绍 1 认识ARM ARM含义 架构 内核 SOC ARM的发展历史 指令集 ARM公司产品分布 ARM体系结构 ARM v8 A
  • 机器学习笔记:李宏毅ChatGPT Finetune VS Prompt

    1 两种大语言模型 GPT VS BERT 2 对于大语言模型的两种不同期待 2 1 专才 2 1 1 成为专才的好处 Is ChatGPT A Good Translator A Preliminary Study 2023 Arxiv
  • 华为OD机试 - 英文输入法(Java)

    题目描述 主管期望你来实现英文输入法单词联想功能 需求如下 依据用户输入的单词前缀 从已输入的英文语句中联想出用户想输入的单词 按字典序输出联想到的单词序列 如果联想不到 请输出用户输入的单词前缀 注意 英文单词联想时 区分大小写 缩略形式
  • requests库学习

    requests库学习 requests快速上手 http 2 python requests org zh CN latest user quickstart html Requests库是用来发送HTTP请求 接收HTTP响应的一个Py
  • ES使用中遇到的坑

    1 ES分页超过10000条报错 es 默认采用的分页方式是 from size 的形式 是一种逻辑上的分页 在深度分页的情况下 采用from to方式进行分页效率会非常的低 例如以下查询 1 GET student doc search
  • 记一次在k8s集群搭建的Harbor私有仓库无法提供服务之镜像迁移恢复实践

    本章目录 记一次在k8s集群搭建的Harbor私有仓库无法提供服务之镜像迁移恢复实践 描述 Harbor 是一个用于存储和分发Docker镜像的企业级Registry服务器 通过添加一些企业必需的功能特性 例如安全 标识和管理等 扩展了开源
  • 内网隧道代理技术(十七)之 NPS的使用

    NPS的介绍和使用 NPS介绍 nps是一款轻量级 高性能 功能强大的内网穿透代理服务器 目前支持tcp udp流量转发 可支持任何tcp udp上层协议 访问内网网站 本地支付接口调试 ssh访问 远程桌面 内网dns解析等等 此外还支持
  • [752]压力测试工具-ab工具

    在学习ab工具之前 我们需了解几个关于压力测试的概念 吞吐率 Requests per second 概念 服务器并发处理能力的量化描述 单位是reqs s 指的是某个并发用户数下单位时间内处理的请求数 某个并发用户数下单位时间内能处理的最