• 开发工具-压力测试工具 ab


    写在前面


    在学习ab工具之前,我们需了解几个关于压力测试的概念
    1. 吞吐率(Requests per second)
      概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
      计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
      Request per second = Complete requests / Time taken for tests
    2. 并发连接数(The number of concurrent connections)
      概念:某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。
    3. 并发用户数(The number of concurrent users,Concurrency Level)
      概念:要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。
    4. 用户平均请求等待时间(Time per request)
      计算公式:处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
      Time per request = Time taken for tests /( Complete requests / Concurrency Level)
    5. 服务器平均请求等待时间(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


    可以在 apache 的官网下载,ab 是 apache 的一部分

    apache 官网

    下载点这里
    在这里插入图片描述
    windows 版在这里
    在这里插入图片描述
    然后这个
    在这里插入图片描述
    接下来选择使用的运行库版本及 SLL 版本等。如果只使用 ab 可以随便选个。
    在这里插入图片描述
    下载后的压缩包内 bin 文件夹下的 ab.exe 就是测试工具了。

    使用 ab

    可以在命令行界面使用 ab 测试工具

    ab的用法是:
    ab [options] [http/https]hostname[:port]/path
    例如:ab -n 5000 -c 200 [http/https]hostname[:port]/index.php
    上例表示总共访问index.php这个脚本5000次,200并发同时执行。
    ab常用参数的介绍:
    -n : 总共的请求执行数,缺省是1;
    -c : 并发数,缺省是1;
    -t : 测试所进行的总时间,秒为单位,缺省50000s
    -p : POST时的数据文件
    -w : 以HTML表的格式输出结果
    -T : POST/PUT 请求时的 content-type
    -C : 添加 cookie,例如 ‘Apache=1234’
    -H : 设置头部信息,以键值对形式

    例如

    ab -n 1000 -c 100 -w [http/https]hostname[:port]/index.php >>d:report.html

    测试结果

    执行完测试,会输出结果,如果使用了 -w 并指定报错的 html 文件,则可以从此文件查看结果报告
    在这里插入图片描述

    报告信息解读

    首先是服务器及访问信息

    • Server Software : 服务器软件
    • Server Hostname : 服务器主机名称
    • Server Port : 服务器端口
    • Document Path : 访问文档路径
    • Document Length : 访问文档的大小(响应正文长度)
      在这里插入图片描述
      然后是测试信息
    • Concurrency Level : 并发请求数
    • Time taken for tests : 测试耗时
    • Complete requests : 完成请求数
    • Failed requests : 失败的请求数
    • Total reansferred : 整个场景中的网络传输量
    • HTML transferred : 整个场景中 HTML 内容传输量
    • Requests per second : 每秒请求数量(吞吐率)
    • Transfer rate : 每秒接收到的网络流量
      在这里插入图片描述
      有时候(例如直接显示测试结果)还有两个比较常用的信息
    • Time per request (mean) : 用户平均请求等待时间
    • Time per request (mean, across all concurrent requests) : 服务器平均请求处理时间
      在这里插入图片描述
      还有网络消耗时间分解
      在这里插入图片描述
      请求处理时间的情况分解
      在这里插入图片描述

    关于 post 请求的压力测试

    ab -n 1000 -c 100 -p “post.txt” -T “application/x-www-form-urlencode” -w http://127.0.0.1:5000/api >> d:report.com
    文本存放的是post请求所需参数

    关于需要登录的测试

    登录后会在 cookie 里有登录信息,例如 token 等。

    使用参数添加 cookie,格式为 key=value

    ab -n 100 -c 10 -C key=value http://test.com/

    或者使用参数添加头部信息,添加 cookie

    ab -n 100 -c 10 -H “Cookie: key1=value1; key2=value2” http://test.com/

    关于报错

    网上查的资料上说,有时会报错

    apr_socket_recv: Connection reset by peer (104) : 用 apache 自带的ab工具测试,当并发量比较多的时候比如超过1000并发会报上述的错误。查看应用服务器和数据库均未报错,连接被重置,Google了一下,apr_socket_recv这个是操作系统内核的一个参数,在高并发的情况下,内核会认为系统受到了SYN flood攻击,会发送cookies(possible SYN flooding on port 80. Sending cookies),这样会减慢影响请求的速度,所以在应用服务器上设置下这个参数为0禁用系统保护就可以进行大并发测试了。另附一些其他设置

    #此参数是为了防止洪水攻击的,但对于大并发系统,要禁用此设置
    net.ipv4.tcp_syncookies = 0  
    #参数决定了SYN_RECV状态队列的数量,一般默认值为512或者1024,即超过这个数量,系统将不再接受新的TCP连接请求,一定程度上可以防止系统资源耗尽。可根据情况增加该值以接受更多的连接请求。
    net.ipv4.tcp_max_syn_backlog
    #参数决定是否加速TIME_WAIT的sockets的回收,默认为0。
    net.ipv4.tcp_tw_recycle
    #参数决定是否可将TIME_WAIT状态的sockets用于新的TCP连接,默认为0。
    net.ipv4.tcp_tw_reuse
    #参数决定TIME_WAIT状态的sockets总数量,可根据连接数和系统资源需要进行设置。 
    net.ipv4.tcp_max_tw_buckets
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    IntelliJ IDEA启动一个普通的java web项目的配置
    mybatis快速入门-注解版
    影刀自动化采集底层逻辑
    React 函数式组件和类式组件区别
    JVM HotSpot 之 内存结构演进过程
    logback--进阶--03--日志打印步骤
    Linux搜索查找命令【详细整理】
    【Hack The Box】linux练习-- Pit
    网络协议:扫盲再出发
    智慧农业:各省市粮食产量排名,“鱼米之乡”湖南位居第十
  • 原文地址:https://blog.csdn.net/runsong911/article/details/126845054