乐趣区

关于测试:聊聊-ab-和-jmeter-的并发模型

作者:烧鸡太子爷

起源:恒生 LIGHT 云社区

简介

后面一篇文章里(详见 很好用的压测工具 – Apache Bench 工具)有讲到因为我的项目须要,在比照了 jmeter 和 ab 当前应用了 ab 测试工具来测试服务器的性能,明天咱们就来讲讲 ab 和 jmter 的并发模型,就是他如何保障可能模仿高并发客户端的场景的。

其实咱们一说到并发,咱们首先想到的就是服务端零碎的并发模型,而为了能测试到这样的服务器零碎的并发能力,性能测试工具也须要反对与之相应的并发包能力。而充沛理解性能测试工具的并发模型,能够更好地帮忙你抉择适宜本人的性能测试工具。其中 JMeter&&ab,Locust 和 Gatling 就抉择了三种不同的发模型,这个应该是和开发者过后的技术背景,业务需要,资源状况等密切相关的。所以没必要去探索过后作者为什么要抉择这个模型,然而能够尝试去了解这些不同模型的特点,从而抉择到适宜本人的模型。明天咱们次要讲的 jmeter 和 ab 的模型,其余的咱们前面有工夫在做剖析。

并发模型的相干概念

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

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

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

目前你能通过百度找到的、能查找到很多对于这些的解释,每个人都会有本人的一些了解。我这边不班门弄斧地来解释这四个词的差异,只是提一些大部分材料中漠视的点:

  • 要辨别同步、异步,必须讲清楚其所处的层,比方框架、用户空间、内核、IO 模型
  • 同步调用发动后,没有失去后果不返回,那么毫无疑问就是被阻塞了
  • 异步调用发动后间接返回,毫无疑问,这个过程没有被阻塞

在 Operating System Concepts [9th Edition](操作系统概念第 9 版本)该书中形容对过程间通信进行了一些形容

也就是说,站在过程通信纬度上来看,阻塞、非阻塞与同步、异步是同义词,然而须要辨别发送方、接管方:

  • 阻塞发送
  • 非阻塞发送
  • 阻塞承受
  • 非阻塞承受

上述不同类型的发送办法和不同类型的接管办法能够自由组合

另外,咱们还晓得 Linux 有五种 I / O 模型:

  • 阻塞式 IO(Blocking I/O)
  • 非阻塞式 IO(Nonblocking I/O)
  • IO 复用(I/O multiplexing)

    • select
    • poll
    • epoll
  • 信号驱动式 IO(Signal Driver I/O)
  • 异步 IO(Asynchronous I/O)

    • AIO

除了 Asynchronous I/ O 以外,其余 4 种都是同步 IO

多过程 / 多线程

做开发的兄弟应该都能了解:

  • 多过程:同一时刻执行多个程序。如,你关上电脑运行微信,钉钉,chrome 等就是多过程(过程列表里能看到多个程序在运行);
  • 多线程:同一时刻执行多个线程。如,用 chrome 一边看新闻,一边听歌,一边看下载(只启一个浏览器过程,运行多线程工作);

理解下面的概念当前呢,而后咱们再来讲讲 ab 和 jmeter 的并发模型

基于多线程并发的 ab、jmeter

ab、JMeter 别离是用 C、Java 开发的、基于多线程并发模型的压测工具,也是目前最风行的开源压测工具,两者的工作原理相似,如下图:

  • 不论 ab 还是 JMeter,其所谓的虚构用户 (vuser) 就是对应一个线程
  • 在单个线程中,每个申请(query)都是同步调用的,下一个申请要期待前一个申请实现能力进行
  • 一个申请(query)分成三局部:

    • send – 施压端发送开始,直到承压端接管实现
    • wait – 承压端接管实现开始,直至业务解决完结
    • recv – 承压端返回数据,直至施压端接管实现
  • 同一线程中间断的两个申请之间存在等待时间这种概念,即图中的空白处

总的来说,多线程模型的优劣势总结有如下

(1)重度依赖于开发语言和操作系统对多线程的反对

(2)多线程切换的时候资源耗费比拟多,在等同资源的状况下,产生的无效并发数量小;

(3)多线程也绝对容易产生谬误,比方死锁,共享数据错乱;

(4)能够通过丰盛的界面来缩小二次开发导致下面的一些谬误;

(5)通过扩大开发和插件实现分布式来满足并发量的有余;

(6)多线程的利用技术比拟成熟,将来相当长时间,还会持续利用于很多性能测试工具。

(7)从利用角度来看,基于多线程的并发模型,往往须要设置最大并发数参数,而如果压测场景须要一直往上加压,那这类工具其实挺难应酬的

参考

  • [操作系统概念第 9 版]
  • < 聊聊 ab、wrk、JMeter、Locust 这些压测工具的并发模型差异 >
退出移动版