当前位置: 首页 > news >正文

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

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

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

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

解决方法:
方法1:修改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/进行查找

方法2:手动生成秘钥和证书。执行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是一个回环地址,不能用于远程连接。

解决方法:
方法1:运行以下命令:./jmeter-server -Djava.rmi.server.hostname=192.16…(本机ip)

方法2:修改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 //查看防火墙状态
bash复制代码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在远程启动时,会先检查参数文件的存在性,如果不存在,就会报错。

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

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

http://www.cnnetsun.cn/news/464282.html

相关文章:

  • 深度测评9个AI论文写作软件,继续教育学生轻松搞定论文!
  • 全网最全专科生必备!9款AI论文软件TOP9测评
  • 屹晶微 EG2184 600V高压、带SD关断功能的1.9A/2.3A半桥栅极驱动器技术解析
  • 小迪安全2023-2024|第12天:信息打点-Web应用企业产权指纹识别域名资产网络空间威胁情报_笔记|web安全|渗透测试|网络安全_2023-2024
  • UTS API插件,助力uniapp开发者快速实现人脸识别活体检测
  • ToDesk超强更新来了!V4.8.4版本全面进化,远程体验再突破!
  • Dify 或 LangChain?高手用原生 API 重构 LLM 开发逻辑
  • 收藏级干货!反思架构:让AI变身“自我审查专家“,代码质量堪比人类专家
  • 【干货】AI Agent:颠覆性技术原理解析,从对话到行动的关键飞跃
  • springboot+vue开发大学生日常行为评奖评优评分班级管理系统j94i24o0应用和研究
  • 【网络安全】网站被篡改怎么办?如何进行有效的防护?
  • 计算机毕业设计springboot学生行李托运平台 基于Spring Boot框架的高校学生行李托运管理系统设计与实现 面向高校学生群体的行李托运平台开发——基于Spring Boot技术
  • 从零开始学CTF:网络安全竞赛完全指南,建议收藏学习
  • 从2025到2026:SUNX 合约交易所是如何一步步赢得用户信任的
  • 解析 LangSmith 的 ‘Nested Trace’:如何通过深度树状视图定位 20 层嵌套循环中的逻辑瓶颈?
  • 北约2025防务全景:六代机、高超音速防御与多域作战革新
  • unity之去除unity启动logo
  • 【2026年最新】做PPT好用的AI工具推荐
  • NginxDeny绕过-玄武杯2025-眼见不为实
  • 从“经验驱动”到“系统智能”:实体门店经营的结构性升级
  • 学霸同款2026TOP10AI论文网站:本科生毕业论文神器测评
  • CSDN技术变现指南:从0到1开启知识创富之路
  • HttpServletRequest request获取整个headers有什么方法
  • 网络安全其实很简单!零基础就能读懂的五大关键技术,颠覆你的认知
  • 虎贲等考 AI:重新定义学术写作,全流程智能赋能科研新生态
  • 网络安全保姆级入门:手把手详解五大核心技术,小白也能快速上手
  • 三大删除命令:MySQL 核心用法解析
  • 蓝图添加组件skeletal mesh
  • MySQL定期备份
  • 网络安全技术全景解读:从基础概念到前沿趋势