性能测试 —— Jmeter分布式测试的注意事项和常见问题

 

Jmeter是一款开源的性能测试工具,使用Jmeter进行分布式测试时,也需要注意一些细节和问题,否则可能会影响测试结果的准确性和可靠性。

Jmeter分布式测试时需要特别注意的几个方面

1. 参数化文件的位置和内容

如果使用csv文件进行参数化,即通过读取csv文件中的数据来为测试脚本提供不同的输入值,那么需要注意以下两点:

  • 需要把参数文件在每台slave上拷贝一份,最好都放置在bin目录下,因为Jmeter会直接从bin目录下查找;

  • 参数文件的内容要保持一致,即每台slave上的参数文件的行数、列数、数据类型等都要相同,否则可能会导致数据不匹配或缺失。

2. slave机器的响应数据

slave机器执行脚本时,若断言执行成功,则在master机器上是看不到请求响应数据的,只有在断言出错时才可见slave的返回。这是为了节省网络带宽和提高测试效率,因为在分布式测试中,通常只关心测试结果的统计和分析,而不需要查看每个请求的详细数据。如果需要查看slave的响应数据,可以在slave机器上打开jmeter.log文件,或者在master机器上设置Jmeter属性mode=Standard,但这样会增加网络开销和测试时间。

3. TCP取样器的配置

若要使用Jmeter分布式进行TCP协议的测试,需要注意以下两点:

  • TCP取样器中“TCPClient classname”该栏必须填写对应的协议,例如,如果要发送二进制数据,就要填写org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl,如果要发送文本数据,就要填写org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl,否则可能会出现数据格式错误或无法发送的问题;

  • 以十六进制发送tcp数据包时,TCP取样器中“End of line(EOL) byte value”必须填写数据包的结束符,例如,如果数据包以0D 0A结尾,就要填写13,否则jmeter会一直等待,无响应。

4. Linux下配置jmeter环境变量

如果在Linux系统下使用Jmeter,需要配置jmeter环境变量,以便于在命令行中直接启动jmeter。具体步骤如下:

  • 编辑/etc/profile文件,添加如下变量:

export JMETER_HOME=/usr/local/jmeter-5.0
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH
  • 使配置文件立即生效,执行命令:

source /etc/profile
  • 查看是否安装成功,执行命令:

jmeter -v
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

Jmeter分布式测试的常见问题和解决方法

问题1:在master上运行jmeter-server.bat时,出现“Exception creating connection to:192.16..;nested exception is:java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件)”错误

原因:Jmeter4.0以上的版本,默认启用RMI连接的安全通信,需要创建密钥库。所以如果没有创建密钥库,就会出现这个错误。

解决方法:

  • 方法一:修改apache-jmeter/bin/jmeter.properties 参数:server.rmi.ssl.disable=true

备注:将master和slave机器上的jmeter.properties文件 参数server.rmi.ssl.disable均改为true

其中linux上是用以下命令:vi jmeter.properties 使用/server.rmi.ssl.disable/进行查找

  • 方法二:手动生成秘钥和证书。执行create-rmi-keystore.bat(Windows适用)或create-rmi-keystore.sh(Linux适用) 生成server.rmi.ssl.keystore.file的key文件,然后将key文件复制到所有的负载机的bin目录下 修改jmeter.properties中

问题2:在slave上(linux系统)运行jmeter-server时,出现“An error occurred: Cannot start. localhost is a loopback address”错误

原因:Jmeter默认使用localhost作为RMI的主机名,但是localhost是一个回环地址,不能用于远程连接。

解决方法:

  • 方法一:运行以下命令:./jmeter-server -Djava.rmi.server.hostname=192.16.*.*(本机ip)

  • 方法二:修改jmeter-server文件

# vi jmeter-server 将jmeter-server中的RMI_HOST_DEF=-Djava.rmi.server.hostname=192.16.*.*(本机ip)

运行./jmeter-server即可

备注:Linux下后台执行,启用server:nohup ./jmeter-server -Djava.rmi.server.hostname=192.16.. &

查看确定jmeter是否启动成功:ps axu | grep jmeter

问题3:远程启动slave机器时,如出现“Jmeter nested exception is:java.net.ConnectException connection timed out:connect ”错误

原因:可能是由于以下几种情况导致的:

  • slave上的ip与master配置文件中的ip不一致;

  • slave机器上有虚拟网卡,导致ip地址不正确;

  • 防火墙或者安全软件阻止了RMI的通信。

解决方法:

  • 查看slave上的ip与master配置文件中的ip是否一致;

  • 如果不一致,查看slave机器上是否有虚拟网卡,将网卡关闭,在此启动Jmeter-server.bat,查看是否正确

  • 查看防火墙是否关闭

注:centos7上关闭防火墙:  firewall-cmd --state   //查看防火墙状态

systemctl stop firewalld.service //关闭防火墙

问题4:当设置csv文件路径时,如果路径不对,无响应

原因:Jmeter在读取csv文件时,如果找不到文件,会一直等待,而不会报错。

解决方法:将csv文件以“相对路径”命名,即将csv文件直接放入bin目录下,在Jmeter路径中直接写入文件名

问题5:(Linux)默认端看1099被占用,如何关闭某个被占用端口的方法

原因:Jmeter使用RMI进行分布式测试时,需要使用1099端口作为注册端口,如果该端口被其他程序占用,就会导致无法启动jmeter-server或者无法连接slave。

解决方法:

  • 查看当前所有tcp端口,执行命令:

netstat -ntlp
  • 查看所有1099端口使用情况,执行命令:

nestat -ntulp |grep 1099
  • 查看占用1099端口的程序pid,执行命令:

lsof -i:1099
  • kill掉该进程,执行命令:

kill -9 1109 //kill掉该进程

问题6:如果使用slave发送数据后,长时间无响应

原因:可能是由于以下几种情况导致的:

  • 发送的数据中存在csv参数文件,但是slave机器的bin目录下没有该文件;

  • 建立的tcp采样器中属性“TCPClient classname”处没有添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

解决方法:

  • 查看发送的数据中是否存在csv参数文件,查看slave机器的bin目录下是否有该文件;

  • 查看建立的tcp采样器中属性“TCPClient classname”处是否添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

问题7:如果你的JMeter返回数据是乱码

原因:可能是由于JMeter的默认编码和服务器的编码不一致,导致数据转换出错。

解决方法:在JMeter安装路径的bin目录下,打开文件jmeter.properties,把Sampleresult.default.encoding的值改为 utf-8 即可。

问题8:启动jmeter时,报错:Error occurred during initialization of VM Could not reserve enough space for object heap errorlevel=1

原因:可能是由于JMeter的默认堆内存大小不足以支持测试的负载,导致内存溢出。

解决方法:

  • bin目录下打开jmeter.bat文件,查找set HEAP,将set HEAP=-Xms128m -Xmx512m修改为set HEAP=-Xms512m -Xmx512m;

  • 重新启动jmeter.bat即可

问题9:当jmeter用作数据库API测试时,如果数据库接口中参数中传递一个数组,如getApps(int nu, int appID[ ]),实际使用过程中报语法错误

原因:可能是由于JMeter的默认参数分隔符是逗号,而数组参数需要用分号分隔,导致语法错误。

解决方法:在JMeter的数据库连接配置中,将参数分隔符改为分号即可。

问题10:当jmeter在windows控制机中添加cvs文件参数化的时候,负载机没有没有文件的时候,远程启动后会执行失败。(即使cvs文件中的变量没有被引用)

原因:可能是由于JMeter在远程启动时,会先检查参数文件的存在性,如果不存在,就会报错。

解决方法:在负载机上添加相同的参数文件,或者在控制机上删除参数文件的引用。

END今天的分享就到此结束了,点赞关注不迷路!

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

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

相关文章

java算法学习索引之动态规划

一 斐波那契数列问题的递归和动态规划 【题目】给定整数N,返回斐波那契数列的第N项。 补充问题 1:给定整数 N,代表台阶数,一次可以跨 2个或者 1个台阶,返回有多少种走法。 【举例】N3,可以三次都跨1个台…

python循环队列

1.循环队列简介: 循环队列是一种队列的实现方式,它可以避免队列空间的浪费。循环队列的特点是队列的末尾连接到队列的开头,形成一个循环。这样当队列尾部元素达到队列的最大容量时,新的元素可以循环地放入队列的开头。这种设计使…

Linux使用Docker完整安装Superset,同时解决please use superset_config.py to override it报错

文章目录 Docker安装Superset流程1. 首先获取镜像2. 生成SSL3. 创建Superset容器4. 更新数据库5. 测试访问Superset Docker安装Superset流程 1. 首先获取镜像 docker pull amancevice/superset2. 生成SSL 接下来我们运行一些额外的程序: openssl rand -base64 4…

ubuntu开机系统出错且无法恢复。请联系系统管理员。

背景: ubuntu22.04.2命令行,执行自动安装系统推荐显卡驱动命令,字体变大,重启后出现如下图错误,无法进入系统,无法通过CTRLALTF1-F3进入TTY模式。 解决办法: 1.首先要想办法进入系统&#xff…

python实现一个简单的桌面倒计时小程序

本章内容主要是利用python制作一个简单的桌面倒计时程序,包含开始、重置 、设置功能。 目录 一、效果演示 二、程序代码 一、效果演示 二、程序代码 #!/usr/bin/python # -*- coding: UTF-8 -*- """ author: Roc-xb """import tkin…

Python数据容器(字典)

字典 1.字典的定义2.字典数据的获取3.字典的嵌套4.嵌套字典的内容获取5.字典的常用操作6.常用操作总结7.遍历字典8.练习 1.字典的定义 同样使用{},不过存储的元素是一个一个的:键值对,语法如下 # 定义字典字面量 {key:value,key:value,...,…

systemverilog:interface中的modport用法

使用modport可以将interface中的信号分组并指定方向,方向是从modport连接的模块看过来的。简单示例如下: interface cnt_if (input bit clk);logic rstn;logic load_en;logic [3:0] load;logic [7:0] count;modport TEST (input clk, count,output rst…

百度飞浆环境安装

前言: 在安装飞浆环境之前得先把pytorch环境安装好,不过关于pytorch网上教程最多的都是通过Anaconda来安装,但是Anaconda环境安装容易遇到安装超时导致安装失败的问题,本文将叫你如何通过pip安装的方式快速安装,其实这…

一键帮您解决win11最新版画图工具难用问题!

🦄个人主页:修修修也 ⚙️操作环境:Windows 11 正文 自从win11更新后,新版的画图工具变得非常难用,如: 使用橡皮擦后露出背版马赛克 框住某部分拖动移动时背景露出马赛克剪贴板上图片信息无法直接插入到画图板 目前没有一个好一些的能够在软件内部解决这些问题的方…

【nlp】2.1 认识RNN模型

认识RNN模型 1 什么是RNN模型2 RNN模型的作用3 RNN模型的分类:1 什么是RNN模型 RNN(Recurrent Neural Network),,中文称作循环神经网络,它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。 一般单层神经网络结构:…

8.查询数据

一、单表查询 MySQL从数据表中查询数据的基本语为SELECT语。SELECT语的基本格式是: SELECT {* | <字段列名>} [ FROM <表 1>, <表 2>… [WHERE <表达式> [GROUP BY <group by definition> [HAVING <expression> [{<operator>…

Linux常用的磁盘使用情况命令汇总

1、查看分区使用百分比 df -h 2、查看指定目录磁盘使用情况 du -hac --max-depth1 /opt 参数&#xff1a;-a 查看所有文件&#xff0c;-c 汇总统计&#xff0c;max-depth1 查看深度为1&#xff0c;2级目录不再统计。 3、常用统计命令汇总

【vue实战项目】通用管理系统:api封装、404页

前言 本文为博主的vue实战小项目系列中的第三篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装to…

Java绘图-第19章

Java绘图-第19章 1.Java绘图类 1.1Graphics类 Graphics类是用于绘制图形的抽象类&#xff0c;它是java.awt包中的一部分。Graphics类提供了各种方法&#xff0c;可以在图形上绘制各种形状、文本和图像。这些方法包括画线、画矩形、画椭圆、画弧、绘制图像等。 1.2Graphics2…

Oracle(17)Managing Roles

目录 一、基础知识 1、基础介绍 2、Predefined Roles 预定义的角色 3、各种角色的介绍 二、基础操作 1、创建角色 2、修改用户默认role 3、回收role 4、删除role 5、为角色授权 6、授予角色给用户 7、查看用户包含的角色&#xff1a; 8、查看角色所包含的权限 9、…

reactive和effect,依赖收集触发依赖

通过上一篇文章已经初始化项目&#xff0c;集成了ts和jest。本篇实现Vue3中响应式模块里的reactive方法。 前置知识要求 如果你熟练掌握Map, Set, Proxy, Reflect&#xff0c;可直接跳过这部分。 Map Map是一种用于存储键值对的集合&#xff0c;并且能够记住键的原始插入顺…

React Virtual DOM及Diff算法

JSX到底是什么 使用React就一定会写JSX&#xff0c;JSX到底是什么呢&#xff1f;它是一种JavaScript语法的扩展&#xff0c;React使用它来描述用户界面长成什么样子&#xff0c;虽然它看起来非常像HTML&#xff0c;但他确实是javaScript&#xff0c;在React代码执行之前&#…

Kafka简单汇总

Kafka的结构图 多个Parttion共同组成这个topic的所有消息。每个consumer都属于一个consumer group&#xff0c;每条消息只能被consumer group中的一个Consumer消费&#xff0c; 但可以被多个consumer group消费。即组间数据是共享的&#xff0c;组内数据是竞争的。二、消费模型…

传输层协议-UDP协议

目录 传输层再谈端口号端口号范围划分认识知名端口号 UDP协议UDP协议格式UDP数据封装UDP数据分用 UDP协议的特点面向数据报 UDP缓冲区UDP使用注意事项基于UDP的应用层协议 传输层 实际上我们应用层的数据并不是直接发给网络的&#xff0c;而是需要先将数据发送给传输层&#xf…

指针传2

几天没有写博客了&#xff0c;怎么说呢&#xff1f;这让我总感觉缺点什么&#xff0c;心里空落落的&#xff0c;你懂吧&#xff01; 好了&#xff0c;接下来开始我们今天的正题&#xff01; 1. ⼆级指针 我们先来看看代码&#xff1a; 首先创建了一个整型变量a&#xff0c;将…