首页 > 其他分享 >性能测试-压测工具ab-1024个并发以下可用以及ab和wrk的优缺点

性能测试-压测工具ab-1024个并发以下可用以及ab和wrk的优缺点

时间:2022-08-21 13:22:15浏览次数:78  
标签:1024 ab http 请求 压测 wrk json

ab全称:ApacheBench,用于 web 性能压力测试,ab 命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。

ab 命令对发出负载的计算机要求很低,不会占用很高CPU和内存,但却会给目标服务器造成巨大的负载。

ab 是 apache 服务器的附属工具,当然如果不需要 apache 也可以独立安装

1、ab安装

#  centos
[root@centos7 wrk]# yum install httpd-tools -y
# ubuntu
apt-get -y install apache2-utils

待命令安装完成后,在系统中执行 ab -V 如果一切正常,就能看到ab相关信息,说明你的电脑已经安装好了ab工具包了。

2、ab参数

ab用法: ab [options] [http[s]://]hostname[:port]/path,常用参数如下截图:

 

 

 

参数:
-c concurrency: 一次产生的请求数,可以理解为并发数
-n requests:执行的总请求数,默认1次
-t timelimit:测试进行的最长时长,可以理解为持续施压时长
-s timeout: 最大超时等待时长
-p postfile: POST 请求文件,但是记得 配置 -T 参数
-u putfile: PUT请求, 但是记得配置 -T 参数
-i: HEAD请求
-m method: 方法名称
-T content-type: 指定POST\PUT请求的头部信息Content-Type,默认为'text/plain',可以根据自己需要更改为如:application/x-www-form-urlencoded、application/json、multipart/form-data
-C attribute: 对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复
-H attribute: 对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")
-A attribute: 对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送
-g filename: 把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题
-e filename: 将执行的结果写到csv文件,并提供百分比
-r : 出现错误时,不退出

3、ab示例

案例: 并发请求,指定时长

用100个并发用户,向 http://www.baidu.com/ 这个网址,持续请求120秒
ab -c 100 -t 120 https://www.baidu.com/

案例: 指定请求次数

创建100个线程(模拟10个用户),累计向百度发送10000个请求

ab -c100 -n10000 https://baidu.com/

案例: GET请求带参数,用户登录

ab -c 100 -t 10 -p data.txt -T "application/x-www-form-urlencoded" http://***/path
# data.txt文件内容为
mobilephone=****&pwd=****

案例: POST请求,带参数,参数类型为json,用户登录

ab -c 1 -n 1 -p user.json -T "application/json" -v 4 http://***/path

# user.json是请求的参数文件 {"name":"*****","pwd":"******"}

 

 

 

上面参考连接:http://testingpai.com/article/1595507309308

关心的几个点

1.Concurrency Level: // 并发数

2.Time taken for tests:  // 总花费时间

3.Complete requests:// 完成请求数

4.Failed requests:  // 失败请求数

5.Requests per second: (mean) // 吞吐率(TPS)

6.Time per request: (mean) // 一个请求花费的平均时间

7.Percentage of the requests served within a certain time (ms) // 请求的时间分布情况

压测主要是评估当前系统的负载,所以一般看看吞吐率(TPS)和成功率就够了,如果想评估接口性能,可以查看第6和第7项数据。

往往需要改变压测参数(并发数和总请求数)多压测几次,才会得到准确的TPS。

注意事项:

  • -c 设置最大并发数,一般不超过1024,因为系统默认设置最大打开文件数为1024,linux中,可以通过 ulimit -a查看
  • -n 指定最大请求数,但是不能操作 50000

4、编写脚本批量压测接口(多个同时同时压测)

在实际压测中,我们往往要压测很多接口,而很多接口都有同时请求的情况,所以我们不能单独一个一个测接口得到TPS,所以需要自己编写脚本,去完成同时压测的要求。

以下是写的一个简单的批量压测脚本test.sh:

#!/bin/sh

RESULT_DIR="/data/home/yawenxu/TestResult/"
jsonFileArr="ff0e_00.json ff0e_02.json ff0e_05.json ff0e_06.json ff0e_07.json ff0e_08.json ff0e_10.json ff0e_11.json" # 每个接口post需要的json参数的文件
concurrency=${1-1} #并发数
count=${2-1}  #总请求数
input_file_name=$3
exec_single_ab(){
        if [ -f $1 ];then
                /usr/bin/ab -n $2 -c $3 -p $1 -T "application/x-www-form-urlencoded" "http://$4" >$RESULT_DIR$1$2"_nginx.txt" 2>&1 &
        else
                echo $1" is not exists"
        fi

}
exec_loop_ab(){
        for item_name in $jsonFileArr
        do
                exec_single_ab $item_name $concurrency $count "http://api.com/xxx" &
        done
}

if [ -f $input_file_name ];then
        exec_single_ab $input_file_name $concurrency $count &
else
        exec_loop_ab &
fi

这个脚本保证了多个接口同时压测,同时将每个接口的压测报告保存到文件里,便于分析。执行命令sh test.sh 10000 10000 一次性生成压测报告文件  $RESULT_DIR$1$2"_nginx.txt

4、ab与wrk的区别、优缺点

ab优缺点如下:

1. 简单易用
2. 支持post请求,接受json文件作为参数 (方便编写脚本批量测试)
3. 压测量不大的情况下够用(1024个并发以下)
ab一些明显缺点
1. 无法持续时间压测,控制速度压测。ab没有这个功能。
2. 压测量起不来。主要是ab只能利用单个cpu,只能是单进程,而系统限制每个进程打开的最大文件数为1024,所以最多1024个线程,如果是多核cpu,就浪费了这些资源。
3. 如果中途的请求被服务器拒绝了,测试报告不完整,无法得出已完成请求的压测情况。以下是中途被服务器拒绝的报告,很不友好:

wrk负载测试时可以运行在一个或者多核CPU。

ab -k -c 100 -t 10 http://domain/path
一个很容易被忽视的参数是「k」,它会增加请求头 Connection: Keep-Alive,相当于开启了 HTTP 长连接,这样做一方面可以降低测试服务器动态端口被耗尽的风险,另一方面也有助于给目标服务器更大的压力,测试出更接近极限的结果。
wrk:
wrk 相对于 ab 来说最大的优点是它支持多线程,这样更容易发挥多核 CPU 的能力,从而更容易测试出系统的极限能力,其典型用法如下:
wrk -c 100 -d 10 http://domain/path
wrk 没有类似参数「k」这样打开 HTTP 长链接的选项,这是因为 wrk 使用的是 HTTP/1.1,缺省开启的是长连接,而 ab 使用的是 HTTP/1.0,缺省开启的是短链接。
如何用 wrk 测试短链接?
wrk -H "Connection: Close" -c 100 -d 10 http://domain/path
也就是说通过参数「H」传递一个自定义的 Connection 请求头来关闭长链接。此外,wrk 支持自定义脚本编程。

标签:1024,ab,http,请求,压测,wrk,json
From: https://www.cnblogs.com/shishibuwan/p/16609852.html

相关文章

  • @EnableConfigurationProperties和@ConfigurationProperties用法及注意事项
    在开发过程中,我们经常看到以下2个注解:@ConfigurationProperties@EnableConfigurationProperties一、先分别介绍一下这两个注解的用法:1、@ConfigurationPropertie......
  • ERROR--Unable to resolve column XXXX
    IDEA报错UnabletoresolvecolumnXXXX解决办法。原因分析IDEA无法完全识别数据库的信息场景在IDEA中的Mybatis需要书写SQL语句时,编译过程会报警告idea......
  • ERROR--"Unable to process Jar entry [module-info.class] from Jar"
    UnabletoprocessJarentry[module-info.class]fromJar原因分析无法从Jar包中处理jar条目[module-info.class]场景启动Idea项目时会出现严重的红色错误......
  • 定时任务-crontab简单用法
    定时任务-crontab简单用法crotab定时任务:在服务器上设置定时器,来执行特定的任务脚本,比如phpXXX或者pythonXXX,或者gorun***crontab基本用法:-crontab时间设置:......
  • 如何通过 SAP ABAP OData $expand 操作在同一个 HTTP 请求中返回多个节点的数据试读版
    正如本教程的开篇介绍文章SAPOData开发教程-从入门到提高(包含SEGW,RAP和CDP)所提到的,SAPOData服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大......
  • Vulfocus靶场 | Metabase geojson任意文件读取漏洞(CVE-2021-41277)
    漏洞描述etabase是一个开源数据分析平台。在受影响的版本中,已发现自定义GeoJSON地图(admin->settings->maps->custommaps->addamap)支持和潜在的本地文件包含(包括环......
  • RabbMQ
    RabbitMQ基本概念Broker:简单来说就是消息队列服务器实体Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列Queue:消息队列载体,每个消息都会被投入到一个或多个队......
  • 压测工具 Locust
    一、认识Locust定义Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即......
  • 压测工具 wrk
    wrk是一款针对Http协议的基准测试工具,它能够在单机多核CPU的条件下,使用系统自带的高性能I/O机制,如epoll,kqueue等,通过多线程和事件模式,对目标机器产生大量的负载。......
  • 压测工具对比
    压测术语负载对被测系统不断施加某种特征的压力,直到性能指标超过预期或某项资源使用达到饱和,以验证系统的处理极限,为系统性能调优提供依据;RPS每秒发送请求数/吞吐率RP......