困扰很多人的分布式性能测试,原来如此简单!

2024-03-10 05:28

本文主要是介绍困扰很多人的分布式性能测试,原来如此简单!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我经常会遇到一些跟我聊性能测试工具Jmeter不好用,我问为什么不好用,他说压力稍微大一些就上不去报错了。一看报错信息就是地址被占用了。这就是典型的分布式的需求了。如果做性能测试,这个基本的问题都不会解决的话,那么表示性能测试你还没有入门哦!

我经常会遇到一些学生跟我聊性能测试工具Jmeter不好用,我问为什么不好用,他说压力稍微大一些就上不去报错了。一看报错信息就是地址被占用了。

图片

这就是典型的分布式的需求了。如果做性能测试,这个基本的问题都不会解决的话,那么表示性能测试你还没有入门哦!

性能测试为什么需要分布式?

我们做性能测试的工具Jmeter是安装在电脑或者服务器机器上的,不管是windows的电脑还是Linux系统机器,能够被使用的端口都是有限的,理论上的最大值 65535个,但是实际上都还到不了这个值:

  • 因为windows机器作为图像界面系统,就是为 普通用户使用, 一般用不了 很多端口。

  • linux机器:默认的时候理论上可用的端口大概有3w个左右

  • windows机器:默认的时候理论上只有 大于 1w+多个端口

然而,我们接口发送请求所用的协议是HTTP协议,这个协议特点:

  • 默认是一个长连接【connection= keep-alive】。所以,每一个请求占用一个端口,而这个请求因为是长连接还会保持一段时间,不会立马释放这个端口。这就导致机器上的端口快速被消耗完。

  • http协议是一个同步协议,一个请求发送完,一定要等收到响应了才发送下一个请求,所以如果服务器的性能越好,服务器能短时间内处理大量的请求,Jmeter客户端的端口就更快被消耗完,所以服务器性能越好,Jmeter能产生的并发用户数反而越少。

而实际项目有可能接口性能比较好,能超过2000并发用户数,这就会超过1个Jmeter客户端能产生的并发用户数。这个时候,我们就需要通过增加Jmeter的机器来产生更多的并发用户数。这就是分布式。

分布式的原理

按照上面讲的分析,分布式就是为了增加客户机对服务器执行并发请求,突破单个机器的瓶颈。分布式的配置图如下:

图片

1、一台主控制/调度机【Controller/Master】, 多台机器为执行机/助攻机【Slave/Agent】

2、执行的时候master会把脚本发送到助攻机上,每个助攻机拿到脚本后开始在还行

  • 注意每台助攻机上都需要有Jmeter安装环境;

  • Jmeter不需要启动gui界面,直接用cli命令行执行;

  • 助攻机会用Linux/windows/macOS都可以,一般推荐用同种机器。

3、执行完成后,slave会把结果传回给master,master会收集所有的salve信息会汇总显示。

所以,性能测试脚本只需要管理者在主控制机上维护和修改变更就可以。假设管理者把线程数变了。每个助攻机的执行者就都按照新的线程数来产生并发用户数。

分布式环境搭建

前提条件准备:
  • 主机和助攻机器jmeter的版本要相同,jdk要主版本要一致。

  • Jmeter的csv的脚本相对路径的启始点一致。

  • Jmeter的插件要一致 。

  • 所有的主控机和助攻机都必须用有线连接网络,同一局域网。

助攻机的配置:

修改Jmeter的配置文件:jmeter.properties

  • 修改 server_port 端口 :默认是1099, 可以不改,也可以修改为自己定义的;

  • 修改 server.rmi.port 端口 :可以不改,如果改就改成和上面相同

  • 去掉认证 server.rmi.ssl.disable=true 不使用加密认证传输数据

完成这些修改,并保存文件,助攻机器的配置完成。保证每台助攻机器都同样的配置。

主控机的配置:

修改配置文件:jmeter.properties

  • remote_hosts=助攻机器ip:端口 ,如果有多个助攻机器信息之间用逗号分开 ;

  • 去掉认证:server.rmi.ssl.disable=true

确认模式:mode=Standard 这个属性,主控和助攻机器之间,使用通用的标准的数据交换方式。

注意:修改属性配置文件,一定要保存文件,然后重启jmeter才生效
启动助攻机,启动命令:

windows:jmeter-server.bat -Djava.rmi.server.hostname=机器ip

**linux: **./jmeter-server -Djava.rmi.server.hostname=192.168.88.134

配置完成后,可以在jmeter图形界面中,看到助攻机器传回来的数据。

图片

点击上图的启动远程可以启动主动机开始跑脚本。可以启动部分,也可以同时启动所有助攻机跑脚本。如此就完美解决了一台客户机运行报错压力上不去的问题。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

这篇关于困扰很多人的分布式性能测试,原来如此简单!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793189

相关文章

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

四种简单方法 轻松进入电脑主板 BIOS 或 UEFI 固件设置

《四种简单方法轻松进入电脑主板BIOS或UEFI固件设置》设置BIOS/UEFI是计算机维护和管理中的一项重要任务,它允许用户配置计算机的启动选项、硬件设置和其他关键参数,该怎么进入呢?下面... 随着计算机技术的发展,大多数主流 PC 和笔记本已经从传统 BIOS 转向了 UEFI 固件。很多时候,我们也

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求