java压测请求线程数_聊聊ab、wrk、JMeter、Locust这些压测工具的并发模型差别

本文探讨了压测工具的选择,重点关注了ab、JMeter、wrk和Locust的并发模型。ab和JMeter基于多线程,wrk利用IO复用提高性能,而Locust采用协程实现并发。文章强调并发模型的重要性,并指出异步API在某些场景中的优势。最后,推荐了基于Goroutine的压测工具Ultron。
摘要由CSDN通过智能技术生成
2bb3d6fb5ff857831501cbc9235f38bd.png
压测选型

选择压测工具是在选什么?

压力测试是测试工程师日常工作中一项比较“有技术含量”的工作,很多人都对这项工作充满了好奇。除了少数特殊场景得靠自己开发压测脚本外,大部分压测工作是可以选用成熟的压测工具来进行的。压测工具有非常多,有开源的、有商业化的,我下面罗列一些常见的:

工具 项目地址
ApacheBench https://httpd.apache.org/docs/2.4/programs/ab.html
wrk https://github.com/wg/wrk
Apache JMeter https://jmeter.apache.org/
Locust https://locust.io/
K6 https://k6.io/
Artillery https://artillery.io/

除了LoadRunner这种商业压测工具之外,大部分测试人员在压测工具的选型时最重要的一点:是否熟悉。这种熟悉往往是出于过往的工作经历、身边同事的推荐、网上教程的多寡、脚本语言等因素。比如我在很多年前开始用Locust时,就是因为我个人擅长Python开发语言,即便在当时几乎没有中文教程。

但我在使用Locust一段时间之后,大约在2015年中,我意识到Locust作为一款压测工具,其能够产生的压力好像远远逊色于JMeter之类,于是开始关注压测工具背后的并发模型,去理解不同压测工具运行逻辑,尝试去解释我看到的性能差异。

同步、异步、阻塞、非阻塞

要讲并发模型,我们绕不开以下四个名词:

  • 同步(Synchronous)
  • 异步(Asynchronous)
  • 阻塞 (Blocking)
  • 非阻塞(Nonblocking)

而且我还要特地指出:目前你能通过搜索引擎找到的、能准确解释这四个概念的中文资料,是极少的。

我这边不会班门弄斧地来解释这四个词的差别,只是提一些大部分资料中忽视的点:

  • 要区分同步、异步,必须讲清楚其所处的层,比如框架、用户空间、内核、IO模型
  • 同步调用发起后,没有得到结果不返回,那么毫无疑问就是被阻塞
  • 异步调用发起后直接返回,毫无疑问,这个进程没有被阻塞

Operating System Concepts [9th Edition]该书中描述对进程间通信进行了一些描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值