ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

压测工具对比

2022-08-20 20:31:00  阅读:171  来源: 互联网

标签:线程 请求 压测 并发 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,工具,对比
来源: https://www.cnblogs.com/goldsunshine/p/16607820.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有