首页 > 其他分享 >压测工具对比

压测工具对比

时间:2022-08-20 20:34:13浏览次数:87  
标签:线程 请求 压测 并发 TPS QPS 工具 对比

压测术语

负载

对被测系统不断施加某种特征的压力,直到性能指标超过预期或某项资源使用达到饱和,以验证系统的处理极限,为系统性能调优提供依据;

RPS 每秒发送请求数/吞吐率

RPS:Requests Per Second 意思是 每秒发送请求数/吞吐率。指客户端每秒发出的请求数。在不单独讨论“事务”的情况下可以近似对应到Loadrunner/jmeter的TPS(Transaction Per Second, 每秒事务数)。

QPS 每秒查询

QPS:Queries Per Second 意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

TPS 每秒事务

TPS:是 Transactions Per Second的缩写,也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。一次TPS包含一个请求QPS+一个返回QPS+中间的处理
三者之间的关系:RPS ≈ TPS = sum(QPS)

QPS vs TPS:
QPS基本类似于TPS,但是不同的是:
对于一个页面的一次访问,形成一个TPS;
但一次页面请求,可能产生多次对服务器的请求。服务器对这些请求,就可计入 QPS 之中。如,访问一个页面会请求服务器2次,一次访问,产生一个TPS,产生2个QPS。
最大响应时间 在一次事务中,从发出请求或指令系统做出的反映(响应)的最大时间
最少响应时间 在一次事务中,从发出请求或指令系统做出的反映(响应)的最少时间
平均响应时间 在一次事务中,从发出请求或指令系统做出的反映(响应)的平均时间
并发数 系统同时处理的请求或事务数,反应了系统的负载能力。

吞吐量

指在一次性能测试过程中网络上传输的数据量的总和,也可以这样说在单次业务中,客户端与服务器端进行的数据交互总量
系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

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

a1面积越大,说明系统的性能能力越强;
a2面积越大,说明系统稳定性越好;
a3面积越大,说明系统的容错能力越好

PV(页面浏览量 Page View)

用户每打开1个网站页面,记录1个PV。用户多次打开同一页面,PV值累计多次

UV(网站独立访客 Unique Visitor)

通过互联网访问、流量网站的自然人。1天内相同访客多次访问网站,只计算为1个独立访客

压测工具

ab

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

开发语言:C

优点
● ab工具小巧简单,上手学习较快,可以提供需要的基本性能指标
● 并发创建多线程
缺点:
● 没有图形化结果,不能监控。
● ab属于一个轻量级的压测工具,结果不会特别准确,可以用作参考

wrk

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

开发语言:C

优点:
● 安装包小巧,只有3M
● 操作简单,易于使用
缺点:
● 没有UI界面
● 复杂场景需要表写lua脚本,有一定的学习成本
● 只允许单机不支持分布式

实战
在实际压测过程中,我曾用一个线程压出过几十万qps,也好奇过为什么一个线程能压出这么高的qps。我们每次请求需要5ms,所以按道理一个线程只能压出200qps,那实际上几百倍的差异是如何来的?后来大致了解到wrk的作者使用了多路复用的技术(epoll,kqueue),每次请求后并不是阻塞等在在那里,而且异步等待结果,同时也可以发起下一个请求,这和redis很像吧,其实wrk的作者代码都是抄的redis的

locust

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

开发语言:Python

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

jmeter

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模式下导入测试计划运行测试

go-stress-testing

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

开发语言: Go

优点:
● 项目开源,使用简单
● 没有依赖,支持webSocket压测
● 单机并发数高
缺点:
● 没有UI界面
● 不够成熟

云压测

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

优点:
● 轻易的实现分布式部署
● 能够模拟海量用户的访问
● 流量可以从全国各地发起,更加真实的反映用户的体验
● 全方位的监控压测指标
● 文档比较完善
缺点:
● 款商业产品在使用的时候自然还是需要收费的,而且价格还是比较昂贵的

● 阿里云 性能测试 PTS
PTS(Performance Testing Service)是面向所有技术背景人员的云化测试工具。有别于传统工具的繁复,PTS以互联网化的交互,提供性能测试、API调试和监测等多种能力。
● 腾讯云 压测大师 LM
通过创建虚拟机器人模拟多用户的并发场景,提供一整套完整的服务器压测解决方案

对比

对比以上提到的五种压测工具:

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

不常用压测工具

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

压测工具选择原则

在实际使用中有各种场景,选择工具的时候就需要考虑这些:
● 明确你的目的,需要做什么压测、压测的目标是什么?
● 使用的工具你是否熟悉,你愿意花多大的成本了解它?
● 你是为了测试还是想了解其中的原理?
● 工具是否能支持你需要压测的场景

标签:线程,请求,压测,并发,TPS,QPS,工具,对比
From: https://www.cnblogs.com/goldsunshine/p/16607820.html

相关文章

  • 项目压测数据
    压测流程首先启动locust压测脚本然后启动bus查分模拟脚本收集数据压测结束,清理数据采集的数据为:请求相关数据,如响应时间,请求总数据量资源相关,请求时pod的数量......
  • 各种Mock方法对比
    各种Mock方法对比1.EasyMock先录制,后播放无法mock静态方法,构造器等过程随着程序逻辑变复杂publicclassHelloTest{@Testpublicvoidworld(){......
  • FontLab(字体制作工具)mac/win
    FontLab8是一款专业的集成字体编辑器,可帮助您从头到尾创建字体,从简单的设计到复杂的项目,并为类型设计带来魔力。在FontLab中,所有功能均启用了颜色。绘制多色轮廓,引入颜......
  • 分析lvgl的代码启动过程,对比esp32,stm32,linux
    lvgl是gui层负责绘制gui并根据输入设备的事件来响应重绘,然后把绘制的缓冲区发送给显示驱动去实际显示。以下代码参考lvglarduino官方例程,guiguider模拟器例程,,零知stm3......
  • 不常见但很有用的chrome调试工具使用方法
     https://www.cnblogs.com/xiaohuochai/p/6344886.html前面的话  对于chrome调试工具,常用的是elements标签、console标签、sources标签和network标签。但实际上,还......
  • MYSQL 工具之mysqladmin
    MYSQL工具之mysqladminmysqladmin是一个MySQL服务器命令行工具,它由DatabaseAdministrators执行一些基本的命令诸如更改root密码、监控mysql进程、重新加载权限、检......
  • php断点调试工具------NetBeans+Xdebug调试php方法(测试成功)
    @原文url:http://www.cnblogs.com/dcb3688/p/4608015.html@netbeans官方调试php代码说明:https://netbeans.org/kb/docs/php/debugging_zh_CN.html个人认为,对有有经验......
  • 【数据库】E-R图相关知识、绘制方法及工具推荐
    一、知识1、介绍E-R图也称实体-联系图(EntityRelationshipDiagram),提供了表示实体、属性和联系的方法,用来描述现实世界的概念模型。2、组成(1)实体(Entity)-矩形标识(2)属......
  • 关于压测服务器差点崩溃
    昨天试着将最近写的秒杀项目部署到服务器上做压力测试。在商品详情做压测一点问题没遇上,因为还没做优化所以当时吞吐量300我觉得还ok然后下单操作的压测就突然一下子请求......
  • PDF转图片的工具
    生活中经常用到PDF转换成图片使用比如发票的PDF文档和工作中的PDF文档,今天刚好有空借着空闲的时间做个PDF转换图片的工具分享给大家,操作简单,转换速度快免费。软件下载地......