常用压测工具对比

这篇具有很好参考价值的文章主要介绍了常用压测工具对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、压测介绍

1.1 压测是什么

  压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患。
  主要检测服务器的承受能力,包括用户承受能力(多少用户同时玩基本不影响质量)、流量承受等。

1.2 压测的意义

  • 压测的目的就是通过压测(模拟真实用户的行为),测算出机器的性能(单台机器的QPS),从而推算出系统在承受指定用户数(100W)时,需要多少机器能支撑得住。
  • 压测是在上线前为了应对未来可能达到的用户数量的一次预估(提前演练),压测以后通过优化程序的性能或准备充足的机器,来保证用户的体验。

1.3 压测术语

1.3.1 压测类型解释
压测类型 解释
压力测试(Stress Testing) 也称之为强度测试,测试一个系统的最大抗压能力,在强负载(大数据、高并发)的情况下,测试系统所能承受的最大压力,预估系统的瓶颈
并发测试(Concurrency Testing) 通过模拟很多用户同一时刻访问系统或对系统某一个功能进行操作,来测试系统的性能,从中发现问题(并发读写、线程控制、资源争抢)
耐久性测试(Configuration Testing) 通过对系统在大负荷的条件下长时间运行,测试系统、机器的长时间运行下的状况,从中发现问题(内存泄漏、数据库连接池不释放、资源不回收)
1.3.2 压测名词解释
压测名词 解释
并发(Concurrency) 指一个处理器同时处理多个任务的能力(逻辑上处理的能力)
并行(Parallel) 多个处理器或者是多核的处理器同时处理多个不同的任务(物理上同时执行)
QPS(每秒钟查询数量 Query Per Second) 服务器每秒钟处理请求数量 (req/sec 请求数/秒 一段时间内总请求数/请求时间)
事务(Transactions) 是用户一次或者是几次请求的集合
TPS(每秒钟处理事务数量 Transaction Per Second) 服务器每秒钟处理事务数量(一个事务可能包括多个请求)
请求成功数(Request Success Number) 在一次压测中,请求成功的数量
请求失败数(Request Failures Number) 在一次压测中,请求失败的数量
错误率(Error Rate) 在压测中,请求成功的数量与请求失败数量的比率
最大响应时间(Max Response Time) 在一次压测中,从发出请求或指令系统做出的反映(响应)的最大时间
最少响应时间(Mininum Response Time) 在一次压测中,从发出请求或指令系统做出的反映(响应)的最少时间
平均响应时间(Average Response Time) 在一次压测中,从发出请求或指令系统做出的反映(响应)的平均时间
吞吐量(Throughput) 指系统在单位时间内处理请求的数量

QPS vs TPS:
QPS基本类似于TPS,但是不同的是:
对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求。服务器对这些请求,就可计入 QPS 之中。如,访问一个页面会请求服务器2次,一次访问,产生一个TPS,产生2个QPS。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

  1. QPS(TPS):(Query Per Second)每秒钟请求/事务 数量
  2. 并发数: 系统同时处理的请求/事务数
  3. 响应时间: 一般取平均响应时间
    吞吐量和负载之间的关系:
    ①上升阶段:吞吐量随着负载的增加而增加,吞吐量和负载成正比;
    ②平稳阶段:吞吐量随着负载的增加而保持稳定,无太大变化或波动;
    ③下降阶段:吞吐量随着负载的增加而下降,吞吐量和负载成反比;

qps测试工具,其他,压力测试
a1面积越大,说明系统的性能能力越强;
a2面积越大,说明系统稳定性越好;
a3面积越大,说明系统的容错能力越好。

1.3.3 机器性能指标解释
机器性能 解释
CUP利用率(CPU Usage) CUP 利用率分用户态、系统态和空闲态,CPU利用率是指:CPU执行非系统空闲进程的时间与CPU总执行时间的比率
内存使用率(Memory usage) 内存使用率指的是此进程所开销的内存
IO(Disk input/ output) 磁盘的读写包速率
网卡负载(Network Load) 网卡的进出带宽,包量
1.3.4 访问指标解释
访问 解释
PV(页面浏览量 Page View) 用户每打开1个网站页面,记录1个PV。用户多次打开同一页面,PV值累计多次
UV(网站独立访客 Unique Visitor) 通过互联网访问、流量网站的自然人。1天内相同访客多次访问网站,只计算为1个独立访客

1.4 如何计算压测指标

压测我们需要有目的性的压测,这次压测我们需要达到什么目标(如:单台机器的性能为 100QPS?网站能同时满足100W人同时在线)

可以通过以下计算方法来进行计算:

  • 压测原则:每天80%的访问量集中在20%的时间里,这20%的时间就叫做峰值
  • 公式:(总PV数×80%) / (每天的秒数×20%) = 峰值时间每秒钟请求数(QPS)
  • 机器:峰值时间每秒钟请求数(QPS) / 单台机器的QPS = 需要的机器的数量
  • 假设:网站每天的用户数(100W),每天的用户的访问量约为3000W PV,这台机器的需要多少QPS?
    ( 30000000×0.8 ) / (86400×0.2) ≈ 1389 (QPS)
  • 假设:单台机器的的QPS是69,需要需要多少台机器来支撑?
    1389 / 69 ≈ 20

二、常见的压测工具

  • wrk
  • locust
  • jmeter
  • Apache Bench
  • go-stress-testing
  • 云压测

2.1 ab

2.1.1 简介

  Apache Bench 是 Apache服务器自带的一个web压力测试工具,简称ab。ab又是一个命令行工具,对发起负载的本机要求很低,根据ab命令可以创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问,因此可以用来测试目标服务器的负载压力。

开发语言:C

优点:

  • ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标
  • 并发创建多线程

缺点:

  • 没有图形化结果,不能监控
  • ab属于一个轻量级的压测工具,结果不会特别准确,可以用作参考
2.1.2 安装
# 在linux环境安装
sudo yum -y install httpd
2.1.3 用法
Usage: ab [options] [http[s]://]hostname[:port]/path
用法:ab [选项] 地址

选项:
Options are:
    -n requests      #执行的请求数,即一共发起多少请求。
    -c concurrency   #请求并发数。
    -s timeout       #指定每个请求的超时时间,默认是30秒。
    -k               #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。

更多参数参考:Apache Bench官方文档

2.1.4 压测命令实例
# 使用ab压测工具,对百度的链接 请求100次,并发数1
ab -n 100 -c 1 https://www.baidu.com/

2.2 Locust

2.2.1 简介

  locust 是非常简单易用、分布式、python开发的压力测试工具。有图形化界面,支持将压测数据导出。locust是完全基于事件的,因此可以在单台机器中支持数以千计的用户在线。和其它基于事件的程序相比较,它是不需要使用回调的,它通过gevent使用轻量级的进程。

开发语言:Python

优点:

  • 使用协程并发,能够支持更多的并发
  • 有UI界面,测试结果展示更加直观
  • python语言开发,构建复杂测试学习成本较低
  • 支持分布式,可以支持更多的并发量

缺点:

  • 测试报告不够丰富
2.2.2 安装
# pip3 安装locust
pip3  install locust
# 查看是否安装成功
locust -h
# 运行 Locust 分布在多个进程/机器库
pip3 install pyzmq
# webSocket 压测库
pip3 install websocket-client
2.2.2 用法

用法详见:Locust性能自动化—代码实战

2.3 wrk

2.3.1 简介

  wrk是轻量化的http性能测试工具,采用线程+网络异步IO模型,网络异步IO可以使得系统使用很少的线程模拟大量的网络连接以增大并发量、提高压力。并且内置了一个可选的LuaJIT脚本执行引擎,可以处理复杂的HTTP请求生成、响应处理以及自定义压测报告。

开发语言:C

优点:

  • 安装包小巧,只有3M
  • 操作简单,易于使用

缺点:

  • 没有UI界面
  • 复杂场景需要表写lua脚本,有一定的学习成本
  • 只允许单机不支持分布式
2.3.2 安装
# Mac下安装:
brew install wrk
2.3.3 用法
-c --conections:保持的连接数
-d --duration:压测持续时间(s)
-t --threads:使用的线程总数
-s --script:加载lua脚本
-H --header:在请求头部添加一些参数
--latency 打印详细的延迟统计信息
--timeout 请求的最大超时时间(s)
2.3.4 压测命令实例
wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10

2.4 JMeter

2.4.1 简介

  jmeter是一个使用Java开发的Apache开源软件,用于软件的性能评估和压力测试。它最初是为测试Web应用程序而设计的,但此后又扩展到其他测试功能。

  jmeter可用于静态和动态资源、Web动态应用程序的性能测试,例如:HTTP、 HTTPS、LDAP、TCP、FTP、SMTP、POP3、IMAP、Shell脚本、数据库、Java 对象,也可以用于对服务器、服务器组、网络或对象上的巨大负载,以测试在不同强度的压力测试下它们的强度和整体性能。

  jmeter同样采用线程并发机制,但其主要依靠增加线程数提高并发量,当单机模拟数以千计的并发用户时,对于CPU和内存的消耗比较大。

开发语言:Java

优点:

  • 界面可视化操作,可以使用录制脚本方式对较为复杂的用户流建模
  • 表格、图形、结果树等多类可视化数据分析和报告输出
  • 支持http、ftp、tcp等多种协议类型测试
  • 插件丰富
  • 支持分布式

缺点:

  • 学习成本大
  • 单机并发量不高
  • 资源消耗大:GUI模式消耗资源较大,当需要测试高负载时,需要先使用GUI工具来生成XML测试计划,然后在非GUI模式下导入测试计划运行测试
2.4.2 安装

访问https://jmeter.apache.org/download_jmeter.cgi下载解压以后即可使用

# Mac命令行安装
brew install jmeter
# 搜索当前是否已经安装jmeter
brew search jmeter
# 查看具体的包信息
brew info jmeter
# 启动jmeter
jmeter

qps测试工具,其他,压力测试

2.4.3 用法

JMeter的功能过于强大,往上使用教程也很多,大家可以自己查找

2.5 go-stress-testing

2.5.1 简介

  go-stress-testing 是go语言实现的简单压测工具,源码开源,9000start、支持二次开发,可以压测http、webSocket请求,使用协程模拟单个用户,可以更高效的利用CPU资源。

开发语言: Go

优点:

  • 项目开源,使用简单
  • 没有依赖,支持webSocket压测
  • 单机并发数高

缺点:

  • 没有UI界面
  • 不够成熟
2.5.2 用法

下载地址:https://github.com/link1st/go-stress-testing/releases
clone 项目源码运行的时候,需要将项目 clone 到 $GOPATH 目录下

#支持参数:
Usage of ./go-stress-testing-mac:
  -c uint       #并发数 (default 1)
  -n uint       #请求数(单个并发/协程) (default 1)
  -u string     #压测地址
  -d string     #调试模式 (default "false")
  -http2        #是否开http2.0
  -k	        #是否开启长连接
  -m int        #单个host最大连接数 (default 1)
  -H value      #自定义头信息传递给服务器 示例:-H 'Content-Type: application/json'
  -data string  #HTTP POST方式传送数据
  -v string     #验证方法 http 支持:statusCode、json webSocket支持:json
  -p string     #curl文件路径

-n 是单个用户请求的次数,请求总次数 = -c* -n, 这里考虑的是模拟用户行为,所以这个是每个用户请求的次数

2.5.3 压测命令实例
# 查看用法
./go-stress-testing-mac

# 使用请求百度页面
./go-stress-testing-mac -c 1 -n 100 -u https://www.baidu.com/

# 使用debug模式请求百度页面
./go-stress-testing-mac -c 1 -n 1 -d true -u https://www.baidu.com/

# 使用 curl文件(文件在curl目录下) 的方式请求
./go-stress-testing-mac -c 1 -n 1 -p curl/baidu.curl.txt

# 压测webSocket连接
./go-stress-testing-mac -c 10 -n 10 -u ws://127.0.0.1:8089/acc

完整压测命令示例:

# 更多参数 支持 header、post body
go run main.go -c 1 -n 1 -d true -u 'https://page.aliyun.com/delivery/plan/list' \
  -H 'authority: page.aliyun.com' \
  -H 'accept: application/json, text/plain, */*' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -H 'origin: https://cn.aliyun.com' \
  -H 'sec-fetch-site: same-site' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://cn.aliyun.com/' \
  -H 'accept-language: zh-CN,zh;q=0.9' \
  -H 'cookie: aliyun_choice=CN; JSESSIONID=J8866281-CKCFJ4BUZ7GDO9V89YBW1-KJ3J5V9K-GYUW7; maliyun_temporary_console0=1AbLByOMHeZe3G41KYd5WWZvrM%2BGErkaLcWfBbgveKA9ifboArprPASvFUUfhwHtt44qsDwVqMk8Wkdr1F5LccYk2mPCZJiXb0q%2Bllj5u3SQGQurtyPqnG489y%2FkoA%2FEvOwsXJTvXTFQPK%2BGJD4FJg%3D%3D; cna=L3Q5F8cHDGgCAXL3r8fEZtdU; isg=BFNThsmSCcgX-sUcc5Jo2s2T4tF9COfKYi8g9wVwr3KphHMmjdh3GrHFvPTqJD_C; l=eBaceXLnQGBjstRJBOfwPurza77OSIRAguPzaNbMiT5POw1B5WAlWZbqyNY6C3GVh6lwR37EODnaBeYBc3K-nxvOu9eFfGMmn' \
  -data 'adPlanQueryParam=%7B%22adZone%22%3A%7B%22positionList%22%3A%5B%7B%22positionId%22%3A83%7D%5D%7D%2C%22requestId%22%3A%2217958651-f205-44c7-ad5d-f8af92a6217a%22%7D'

使用 curl文件进行压测:

# 使用 curl文件(文件在curl目录下) 的方式请求
go run main.go -c 1 -n 1 -p curl/baidu.curl.txt #cur文件在项目目录下的curl/baidu.curl.txt中

2.6 云压测

  云压测就是将压测脚本部署在云端,通过云端对对我们的应用进行全方位压测,只需要配置压测的参数,无需准备实体机,云端自动给我们分配需要压测的云主机,对被压测目标进行压测。

优点:

  • 轻易的实现分布式部署
  • 能够模拟海量用户的访问
  • 流量可以从全国各地发起,更加真实的反映用户的体验
  • 全方位的监控压测指标
  • 文档比较完善

缺点:

  • 款商业产品在使用的时候自然还是需要收费的,而且价格还是比较昂贵的

阿里云 性能测试 PTS:
  PTS(Performance Testing Service)是面向所有技术背景人员的云化测试工具。有别于传统工具的繁复,PTS以互联网化的交互,提供性能测试、API调试和监测等多种能力。

腾讯云 压测大师 LM:
  通过创建虚拟机器人模拟多用户的并发场景,提供一整套完整的服务器压测解决方案。

三、压测工具对比

ab wrk locust jmeter go-stress-testing
支持分布式 不支持 不支持 支持 支持 支持
开发语言 Java C Python Java Go
并发机制 线程 线程 协程 线程 协程
单机并发能力 较高
测试脚本语言 Lua Python GUI Go
报告与分析 简单结果 简单结果 简单图形化 丰富图表 简单结果

四、不常用压测工具

1、LoadRunner: 大而全,要学精通还是有点难度,重量级工具
2、WAS:是Microsoft提供的免费的Web负载压力测试工具
3、Web bench: 一个简单的web基准指标测试工具
4、Load UI: 一款开源的压力测试工具,支持图形化

参考文档:https://github.com/link1st/go-stress-testing#21-%E5%8E%8B%E6%B5%8B%E6%98%AF%E4%BB%80%E4%B9%88文章来源地址https://www.toymoban.com/news/detail-546522.html

到了这里,关于常用压测工具对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常用压测工具对比

    1.1 压测是什么   压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患。   主要检测服务器的承受能力,包括用户承受能力(多少用户同时玩基本不影响质量)、流量承受等。 1.2 压测的意义 压测的目的就

    2024年02月13日
    浏览(39)
  • Jmeter-压力测试工具

    1s内发送大量请求,模拟高QPS,用以测试网站能承受的压力有多大 Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。 可以Apache Jmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi 或者直接用这个提供好的旧版本: 链接:https://pan.baidu.com

    2024年02月13日
    浏览(58)
  • 压力测试与测试工具jmeter的介绍

    目录 一、性能指标 二、jmeter (一)JMeter 安装 (二)JMeter 压测示例 1、添加线程组 2、添加 HTTP 请求  3、添加监听器 4、启动压测查看分析结果 (三)JMeter Address Already in use 错误解决   压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测

    2024年02月14日
    浏览(50)
  • iometer - 性能压力测试工具

            《存储工具系列文章》主要介绍存储相关的测试和调试工具,包括不限于dd、fio、vdbench、iozone、iometer、cosbench等性能负载工具,及strace等调试工具。         Iometer 是一个免费的开源的测试磁盘性能的工具。和其他磁盘工具相比,可以测试 I/O 的传输率和平均的

    2024年02月02日
    浏览(40)
  • 5款软件压力测试工具分享

    一、什么是软件压力测试? 软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源

    2024年02月02日
    浏览(42)
  • Apache自带压力测试工具—ab

    ab全称为:apache bench 我们先来了解一下压力测试的概念: 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 计算公式:

    2024年01月16日
    浏览(47)
  • 压力测试工具Jmeter安装及使用

    Jmeter 依赖于 JDK ,所以必须确保当前计算机上已经安装了 JDK ,并且配置了环境变量。 1.1.下载 可以 Apache Jmeter 官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi 1.2.解压 因为下载的是 zip 包,解压缩即可使用,目录结构如下: 其中的 bin 目录就是执行的脚本,其中包含启动

    2024年02月02日
    浏览(72)
  • JMeter - 接口压力测试工具简单使用

    【启动前配置】 启动JMeter前可以先配置语言和编码: 修改:E:JMeterapache-jmeter-5.5binjmeter.properties文件中: 1.language=en # 指定语言 language=zh_CN 2.sampleresult.default.encoding=ISO-8859-1 # 指定编码 UTF-8 sampleresult.default.encoding=UTF-8 也可以启动后设置语言:Options  -- Choose language  -- Chinese

    2024年02月12日
    浏览(46)
  • 十个免费的 Web 压力测试工具

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客 文章浏览阅读1.3k次,点赞60次,收藏8次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口

    2024年02月22日
    浏览(41)
  • DDR压力测试--stressapptest开源工具编译

    Stressful Application Test(或stressapptest)试图最大化处理器和I/O到内存的随机流量,目的是创建一个现实的高负载情况。 stressapptest可以用于各种目的: 压力测试 硬件鉴定和调试。 内存接口测试。 磁盘测试 https://github.com/stressapptest/stressapptest 或者 https://gitcode.net/mirrors/stressappt

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包