手把手教你配置和使用3款压测工具 —— 没压测过,面试都说出来系统数据!

2023-10-25 11:36:35 浏览数 (1)

本文的宗旨在于通过简单干净实践的方式教会读者,如何使用JMeter进行工程的压测测试。也同时会介绍到;ApacheBench、Siege 两个更简单压测工具的使用。

压测是开发完成正式上线对外使用前非常重要的一环,尤其是各个互联网大厂,上线的核心应用和在618、双11以及各种大促时间节点下的应用,都需要进行压测摸底,知道一个系统的最大承载量,并基于这样的一个量的安全范围值内设置熔断、限流和降级的指标。—— 而且这也是面试过程中评估你是否真的做过上线系统的能力考察项;你的系统负载量多大、部署多少台服务器、响应时间怎么样、峰值是多少

本文涉及的工程:

  • xfg-dev-tech-jmeter:https://gitcode.net/KnowledgePlanet/road-map/xfg-dev-tech-jmeter

一、工具安装

这个安装分为本地安装和云服务安装,一般正规的玩法是本地安装后来写测试计划看效果。之后把jmx文件放到云服务器来执行压测。这样才能不受GUI和本地的限制,压测的比较大。本文提供了Docker部署和执行 JMX 压测脚本

1. 本地安装

  • 环境:JDK 1.8 - 因为这是一个纯Java开发的软件,所以需要JDK环境
  • 官网:https://jmeter.apache.org/download_jmeter.cgi - Mac 下载 apache-jmeter-5.6.2.tgzWindows 下载 apache-jmeter-5.6.2.zip 注意官网还有对应的文档,很清晰的介绍了使用方法。

2. 云服务安装

脚本:xfg-dev-tech-jmeter/docs/dev-ops/docker-compose.yml

代码语言:javascript复制
version: '3'
services:
  # JMeter是一个功能强大的性能测试工具,可以模拟多种类型的负载,并提供详细的测试报告
  # 官网:https://jmeter.apache.org/
  # 脚本:jmeter -n -t one.jmx -l one.jtl
  Jmeter:
    image: justb4/jmeter:5.5
    container_name: jmeter
    restart: always
    environment:
      - DISPLAY=:0
      - TZ=Europe/Paris
    volumes:
      - https://bugstack.cn/images/roadmap/tutorial/jmx/:/opt/apache-jmeter-5.5/jmx/
  • 如果你本地已经安装 Docker 那么直接执行 docker-compose.yml 即可完成安装。
  • 注意,xfg-dev-tech-jmeter/docs/dev-ops/jmx 下是 JMeter 所保存的压测脚本。

1. 解压启动

进入到 apache-jmeter-5.5/bin 目录下;

  • Mac 电脑,在 jmeter 上右键,选择终端启动。
  • Windows 电脑,直接点 jmeter.bat 启动。

2. 配置语言

修改语言有2个方式;

  • 进入 apache-jmeter-5.5/bin/jmeter.properties 设置 language=zh_CN
  • 如图,进入页面,手动选择。

二、配置说明

这是 JMeter 压测配置中非常简单的一个测试计划,在这个测试计划下需要包括线程组 - 负责运行取样器(压测的接口) - 负责调接口至少一个监听器 - 负责看结果。这样才能完成压测并获得结果。

1. 线程组

通过线程组开启对HTTP接口的请求循环操作方式。它可以模拟配置出流量的负载均值请求、峰值请求、逐步加量等场景。

1.1 函数线程组
  • Open Mode Thread Group 支持配置简单的配置和 Groovy 脚本 如;${__groovy((1..5).collect { "rate(" it*10 "/sec) random_arrivals(10 sec) pause(1 sec)" }.join(" "))} - 请求10次,每次都递进。
  • 你还可以配置这些参数;rate(0/min) random_arrivals(10 min) rate(100/min)rate(0/min) random_arrivals(5 min) rate(100/min)random_arrivals(100 min)rate(100/min) random_arrivals(5 min) rate(0/min) - 通过这样的规律,就可以找到如何配置了。
  • 此外还支持 JMeter 函数:pause(2 min) rate({__Random(10,50,)}/min)random_arrivals({__Random(10,100,)} min) rate(
  • 负载举例;总时长为1分10秒。前10秒内,速率达到10/s,然后,在1分钟内吞吐量将保持在10/s。最大吞吐量为600个/分钟。配置:rate(0/s) random_arrivals(20 s) rate(10/s) random_arrivals(1 m) rate(10/s)
1.2 简单线程组

简单线程组配置起来更简单,也适合一些循环压测的场景。

  • 线程数:一个用户相当于一个线程。
  • Ramp-Up:预期线程组的所有线程从启动-运行-释放的总时间。ramp up=0时,表示瞬时加压,启动线程的时间无限趋近于0。在负载测试的时候,尽量把ramp up设置大一些,让性能曲线平缓,容易找到瓶颈点。
  • 循环次数:线程组的循环次数,如果不设置,则表示在调度时间范围内一直循环(jmeter不停的发请求)。
  • 调度器:执行的时间设置。

此外,JMeter 还可以安装插件,设置更多的线程组模型来压测。

2. 取样器

JMeter 把对压测的内容,抽象为取样器。包括HTTP接口、FTP服务等。

如图你可以通过这样的方式,在创建好的线程组下,创建一个取样器(HTTP压测接口)。不过这里小傅哥更建议你使用 cURL 方式导入使用。

2.1 复制 cURL
2.2 导入 cURL
  • 导入以后,可以把HTTP请求拖到线程组下面。

3. 监听器

线程组是各类方式的模拟压测调用,取样器HTTP是压测的接口。那么监听器就是看线程组对取样器HTTP的压测结果。

三、工程准备

为了让大家更加方便的测试,不用自己在折腾,可以直接使用测试工程。测试工程内提供了测试的接口,以及对应的 jmx 脚本。启动后就可以执行测试。

  • docker-compose.yml 是部署 JMeter 到 Docker 的脚本。并在脚本中映射了本地的压测脚本。
  • one.jmx 是在使用 JMeter 时导出的脚本,你可以直接复制 JMeter 脚本,也可以让 JMeter 保存脚本的时候选择到这个路径下。
  • 注意 one.jmx 有压测对应接口的 IP,测试的时候需要修改为你的服务器/本机IP才可以。<stringProp name="HTTPSampler.domain">127.0.0.1</stringProp>

四、压测验证

1. 本地压测

  • 开启服务:xfg-dev-tech-jmeter
  • 启动压测:JMeter

2. 脚本压测

云服务 https://3.cn/1K-cfT7D - 【2核2G - 40G 3M 5.5元1月】【2核2G - 40G 3M带宽 88元1年】,项目学习时如果需要服务器可以用用。如果无对外诉求,本地安装 Docker 也可以。 压测命令:jmeter -n -t one.jmx -l one.jtl

五、其他工具

  • ApacheBench:一个轻量级的HTTP性能测试工具,可以模拟多种类型的负载,并提供详细的测试报告。脚本:ab -n 10 -c 2 http://localhost:8091/api/jmeter/query_order_info?orderId=100001
  • Siege:是常用的HTTP性能测试工具,可以模拟多个并发用户发送请求。脚本:siege -c10 -r1 -p http://localhost:8091/api/jmeter/query_order_info?orderId=100001
  • ApiPost:自带接口简单压测模拟,安装更加简单,适合初步压测验证。

六、项目实战

压测,压的不只是一个接口,而是整个服务的性能,包括;连接池、线程池、缓存、数据库、消息队列、网络、功能逻辑等等,所以我们需要更好的项目来锻炼编程能力和学习压测优化。以下这些项目就非常具有C端和技术组件的代表性。

0 人点赞