写在前面


学习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服务器进行网站访问压力测试,也可以对或其它类型服务器进行压力测试比如nginxtomcat、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 请求时的 contenttype
-C : 添加 cookie例如 ‘Apache=1234’
-H : 设置头部信息,以键值对形式

例如

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

测试结果

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

报告信息解读

首先是服务器访问信息

关于 post 请求的压力测试

ab -n 1000 –c 100 -p “post.txt” -T “application/xwwwformurlencode” -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

原文地址:https://blog.csdn.net/runsong911/article/details/126845054

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_28364.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注