JMeter 入门之远程启动,服务模式,多机联测,负载均衡测试

本文主要介绍 JMeter 远程启动及使用多节点完成大并发测试(负载均衡测试),主打一个压力山大,借用 黑神话:悟空 的技能来描述就是远程开大,释放猴子猴孙技能。

搜了一些 jmeter 的案例或教程,讲的乱七八糟,图不对文,词不达意,配置混乱,其实很简单,不需要那么繁琐,跟着我的思路来就行了,亲自实操验证过的,绝不是勾兑的(如果对大家有帮助,欢迎冠珠,收藏,点赞)。

JMeter 支持以 Server 模式启动,也可以认为是一个等待任务派发的 Agent ,我们还拿 黑神话:悟空 举例,悟空真身是一个 Controller 控制节点(本身也可以作为 Agent),每个猴子猴孙相当于一个 Agent, 悟空真身 Controller 可以让 1 个或多个猴子猴孙进行攻击(单个执行或批量执行)。

默认你的环境已经安装好 JDK 了,也下载好 jmeter 安装包了,这部分不讲了。

服务模式启动

这里的远程启动就是指 server 模式启动,无论是 windows 还是 linux 都可以以 server 模式启动,server 模式启动还是比较简单的,我们还以 windows 为例(后面会演示 linux)

修改 bin 目录下的 jmeter.properties 文件的 ssl.disable 一项为:true, 其余部分省略

....
# Set this if you don't want to use SSL for RMI
#server.rmi.ssl.disable=false
server.rmi.ssl.disable=true
....

默认情况下,直接启动,就会得到一个只有本机节点的 agent

在 bin 目录下,直接双击 jmeter-server.bat 即可启动,或者 打开 powershell 或者 cmd 命令行窗口,执行

# 在 bin 目录下直接执行
./jmeter-server.bat

得到如下界面即表示启动成功

本地 GUI 调用

服务模式启动成功后,可以直接再双击打开 jmeter.bat 启动 GUI 界面,依次 Run - Remote Start - 127.0.0.1 即可执行测试计划

cmd 窗口会收到开始执行的日志输出,这时就表示是使用 server 模式执行的

本地命令行调用

如果不想打开 GUI 界面,也可以直接命令行执行,也很简单,使用你通过 GUI 保存的测试计划文件即可

./jmeter.bat -n -R 127.0.0.1 -t examples/test.jmx

参数说明:

  • -n, 表示 no gui, 不使用界面
  • -R, 指定远程主机,这里本机起的只有一个 127.0.0.1, 并且测试下来 -R 与 127.0.0.1 之间要有一个空格
  • -t, 指定要使用的测试计划

下面打印出来的内容就是表示使用了哪几个远程主机,性能概要输出,比如我上面的输出就是 总共 请求了 10 次,用时 1 秒,每秒执行了 10.2 次,平均响应时长 43 ms, 最小响应时长 36 ms, 最大响应时长 53 ms,错误 0 个,错误率 0.00%

下面我们来实践 linux 启动 服务模式

Linux 启动

我们所说的 linux 一般是无界面的,所以一般是直接命令行执行了,比如可以直接执行 jmeter 命令进行单机测试

./jmeter -n -t examples/test.jmx

我上面的示例就直接以 standalone 形式启动测试。

Linux 服务模式

linux 服务模式启动其实和 windows 一样,但是我们一般是采用多机负载的形式,所以需要设置一个端口,设置方式很简单,直接更改 bin 目录下的 jmeter.properties 文件如下 3 个地方的内容(其他内容未更改,省略未展示):

...
# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099
server_port=10000
...
# To use a specific port for the JMeter server engine, define
# the following property before starting the server:
#server.rmi.localport=4000
server.rmi.localport=10000
...
#server.rmi.ssl.disable=false
server.rmi.ssl.disable=true
...

使用 10000 端口用来启动

# 在 bin 目录下直接执行
./jmeter-serverUsing local port: 10000
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[10.70.200.66:10000](local),objID:[59a72b36:191e105eec6:-7fff, -5825468673534152766]]]

新开终端窗口,执行 netstat 可以查看当前 10000 端口已打开

Linux 远程测试

使用当前机器,或者另外一台机器都可以进行测试,我们以另一台机器为例吧,比较贴近实战

首先要更改 bin/jmeter.properties 配置中的 ssl.disable 为:true, 不然执行会报错(java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory))

...
#server.rmi.ssl.disable=false
server.rmi.ssl.disable=true
...

准备好 test.jmx 测试计划文件即可,远程机不需要放置 jmx 文件,很多教程说远程机也需要,其实是错误的,哪个脑残会这样设计

./jmeter -n -R10.70.200.66:10000 -t examples/test.jmx

使用 -R 参数,这里可以不加空格也可以,windows 比较脑残,使用 -R 参数也不需要 jmeter.properties 文件中指定 remote_hosts ,因为 -R 已经指定了

如果需要指定多台执行,可以逗号隔开多台,如:

./jmeter -n -R10.70.200.66:10000,10.70.200.129:10000 -t examples/test.jmx

但是,如果不想使用 -R,想使用 -r (全部执行),这时可以配置 remote_hosts, 不然只有一个 127.0.0.1

这里配置一下,仅对 -r 参数有用

直接执行

./jmeter -n -r -t examples/test.jmx

性能优化

主要就是 Java 相关的优化,比如 HEAP 设置,可以通过设置环境变量的形式实现,比如

export HEAP="-Xms8g -Xmx8g -XX:MaxMetaspaceSize=512m"
./jmeter-server

在新窗口查看,其中有 -Xms8g -Xmx8g -XX:MaxMetaspaceSize=512m

ps -ef | grep jmeterroot     3391984 3391962 22 20:19 pts/0    00:06:12 /usr/local/kona-11/bin/java --add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/sun.swing=ALL-UNNAMED --add-opens java.desktop/javax.swing.text.html=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED -server -XX:+HeapDumpOnOutOfMemoryError -Xms8g -Xmx8g -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 -Djava.security.egd=file:/dev/urandom -Duser.language=en -Duser.region=EN -jar ./ApacheJMeter.jar -Dserver_port=1099 -s -j jmeter-server.log

更多环境变量通过查看 jmeter 文件开头部分就可以看到。

cat jmeter...
##   ==============================================
##   Environment variables:
##   JVM_ARGS - optional java args, e.g. -Dprop=val
##
##   e.g.
##   JVM_ARGS="-Xms1g -Xmx1g" jmeter etc.
##
##   Do not set the variables in this script. Instead put them into a script
##   setenv.sh in JMETER_HOME/bin to keep your customizations separate.
##
##   JAVA_HOME        Must point at your Java Development Kit installation.
##                    Required to run the with the "debug" argument.
##
##   JRE_HOME         Must point at your Java Runtime installation.
##                    Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME
##                    are both empty, JMeter will try to guess JAVA_HOME.
##                    If JRE_HOME and JAVA_HOME are both set, JAVA_HOME is used.
##
##   GC_ALGO          (Optional) Java runtime options to specify JVM garbage collection
##                    algorithm
##                    Defaults to "-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20"
##
##   HEAP             (Optional) Java runtime options for memory management
##                    used when JMeter is started.
##                    Defaults to "-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"
##
##   JMETER_HOME      (Optional) May point to your JMeter install dir. If empty
##                    it will be set relativ to this script.
##
##   JMETER_LANGUAGE  (Optional) Java runtime options to specify used language
##                    Defaults to "-Duser.language=en -Duser.region=EN"
##
##   JMETER_OPTS      (Optional) Java runtime options used when JMeter is started.
##                    Special options for operating systems might be added by JMeter.
##
##   ==============================================
...

踩坑记录

作为新手,新学一个东西,在网上搜了搜,免不了要踩坑,因为很多博主写的内容都过期了,或者压根自己也没细探究,不知道从哪搬运的,不够负责,下面简单分享一下踩了哪些坑(有些可能不算,只能算弯路吧)

1,被一些堆字数的文章绕晕了,我只想跑起一个简单的测试,看一堆无用的介绍

2,还没开始,被一些博主所谓的前置条件给牵制了,一堆必须满足这条件,那条件的

3,词不达意,图不对文,驴嘴不对马脸,看着头大

4,有些太简单,看了等于没看,有些太复杂,看了等于没看

5,没有遵循最小化,实操性进行撰写博文

6,服务模式启动 /etc/hosts 不能配置 主机名指向 127.0.0.1 会报错

7,需要禁用 ssl, 即 ssl.disable=true

8,remote_hosts 只在 -r 参数有用,可以使用 -R 精确指定

9,只需要配置 server_port, server.rmi.localport, server.rmi.ssl.disable 其他不用动

10,开启端口,注意关闭防火墙或放开端口

关于我

我是祥子,不拉车的祥子,专注技术和工具的分享,擅长云原生,SRE等,也正在探索新媒体和 AI 相关的内容,记录生活,分享生活,提升自己,帮助别人,如果文章对您有帮助,也欢迎您的点赞,转发,点亮在看,感谢您的鼓励与支持!

如果需要找到我,可以通过下方的照骗就可以找到!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus分页查询、分组查询

目录 准备工作1. 实体类2. Mapper类3. 分页插件4. 数据 分页查询1. 使用条件构造器2. 使用自定义sql 分组查询1. 分组结果类2. 自定义sql3. 测试类 准备工作 1. 实体类 对地址字段address使用字段类型转换器,将List转为字符串数组保存在数据库中 package com.exa…

Docker 部署 Redis (图文并茂超详细)

部署 Redis ( Docker ) [Step 1] : 拉取 Redis 镜像, 推荐使用 7 的 Redis 版本 docker pull redis:7.0.12[Step 2] : 创建 Redis 相关目录 ➡️ 启动 Redis 容器 ➡️ 拷贝文件 ➡️ 授权文件夹 ➡️ 删除容器 # 创建 Redis 相关目录 mkdir -p /data/redis/{conf,data,log…

探索Python中文拼音转换的奥秘:xpinyin库

文章目录 **探索Python中文拼音转换的奥秘:xpinyin库**背景介绍库简介安装指南函数使用示例应用场景常见问题与解决方案总结 探索Python中文拼音转换的奥秘:xpinyin库 背景介绍 在处理中文文本数据时,我们经常需要将中文字符转换为拼音。无…

【LabVIEW学习篇 - 23】:简单状态机

文章目录 简单状态机状态机的创建和了解状态机实现红绿灯 简单状态机 一个优秀的应用程序离不开好的程序框架,不仅要很好满足用户的功能需求,还要考虑到系统的稳定性、实时性、可扩展性、可维护性,执行效率等方面。借用一些成熟的设计框架&a…

【C++】string类的基本使用

一、string类的由来 在C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户 自己管…

MBD_入门篇_23_SimulinkSinks

23.1 概述 Sink库里面是Simulink的显示或导出信号数据的模块,可以理解为信号的最后接收的模块,要么用于显示要么用于传递给更上层的系统要么终止。 Sink库里面的模块都只有输入,没有输出。 23.2 回顾常用模块 23.2.1 Display 用于实时仿真…

Computer Exercise

每日一练 单选题 在Word2003中,通过(     D    )不能设置字符格式。 A.格式菜单     B.格式工具栏     C.格式刷     D.常用工具栏数据库系统而言,主要通过权限和授权来实现安全管理,其中update权限表示&am…

数据库——MySQL概述

一、数据库 存储数据的仓库,数据是有组织的存储,简称database(DB) 二、数据库管理系统 操控和管理数据库的大型软件(DBMS) 三、SQL 操作关系型数据库的编程语言,定义了一套操作关系型数据库…

Leetcode面试经典150题-134.加油站

解法都在代码里,不懂就留言或者私信 class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {/**如果只有一个加油站,那它本来就在那个为止,0就是它的编号?但是这只是你的想象,题目有个变态规定,自…

python-古籍翻译

题目描述 小理跑到外星人的图书馆去读书。有一本外星古籍,里面的内容是用八进制写成的;但小理只能处理十六进制的数据。请你帮忙写一个翻译软件,帮小理把八进制串翻译成十六进制串。 输入 仅一行,一个八进制字符串 s&#xff0…

创建Java项目,可实现main方法运行,实现对性能数据的处理

1、Android Studio无法执行Java类的main方法问题及解决方法 Android Studio无法执行Java类的main方法问题及解决方法_delegatedbuild-CSDN博客 D:\workspaces\performanceTools\.idea 文件夹下&#xff0c;gardle.xml ,添加依赖 <option name"delegatedBuild"…

QT:音视频播放器

目录 一.播放器设计 二.需要使用的控件 三.选择视频 四.播放视频 五.暂停视频 六.关闭视频 七.播放状态设置 八.切换视频(上一首) 九.切换视频(下一首) 十.设置视频滑块 十一.更新滑块显示 十二.实现效果 十三.代码设计 1.mainwindow.h 2.mainwindow.cpp 一.播放…

预警提醒并生成日志,便于后期追溯的智慧地产开源了

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 AI是新形势下数…

基于Springboot美食推荐小程序的设计与实现(源码+数据库+文档)

一.项目介绍 pc端&#xff1a; 支持用户、餐厅老板注册 支持管理员、餐厅老板登录 管理员&#xff1a; 管理员模块维护、 餐厅管理模块维护、 用户管理模块维护、 商品管…

NAT技术+代理服务器+内网穿透

NAT技术 IPv4协议中&#xff0c;会存在IP地址数量不充足的问题&#xff0c;所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的&#xff0c;而公网中的IP地址都是唯一的&#xff0c;所以NAT&#xff08;Network Address Translation&…

Pyspark下操作dataframe方法(1)

文章目录 Pyspark dataframe创建DataFrame使用Row对象使用元组与scheam使用字典与scheam注意 agg 聚合操作alias 设置别名字段设置别名设置dataframe别名 cache 缓存checkpoint RDD持久化到外部存储coalesce 设置dataframe分区数量collect 拉取数据columns 获取dataframe列 Pys…

[数据集][目标检测]智慧农业草莓叶子病虫害检测数据集VOC+YOLO格式4040张9类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4040 标注数量(xml文件个数)&#xff1a;4040 标注数量(txt文件个数)&#xff1a;4040 标注…

【小沐学OpenGL】Ubuntu环境下glew的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glew简介 2、安装glew2.1 命令安装glew2.2 直接代码安装glew2.3 cmake代码安装glew 3、测试glew3.1 测试glewfreeglut3.2 测试glewglfw 结语 1、简介 1.1 OpenGL简介 Linux 系统中的 OpenGL 是一个跨语言、跨平台的应用程序编程接口&#…

多态的概念

多态 所谓的多态其实就是多种形态&#xff0c;它又被分为编译时多态(静态多态) 和 运行时多态(动态多态)。 静态的多态其实就是之前的模版和函数重载&#xff0c;今天我们主要讲动态的多态。所谓的动态多态其实就是相同的函数&#xff0c;完成不同的功能。 这就实现了明明都是…

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P84

更正卷积与相关微课中互相关运算动画中的索引。 1-D correlation rectwave 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码