jmeter 之性能分布式压测
背景:
当并发量达到一定数量时,单台测试设备不足以支撑,甚至会出现内存溢出等情况,解决这个问题就可用分布式测试,使用多台测试设备来达到更大的用户并发数。
原理:
1.一台设备作为调度机(master),其他设备作为执行机(slave)
2.执行时,调度机会将脚本发送到执行机,执行机收到脚本后开始执行。
3.执行结束后,执行机会将结果回传到调度机,调度机将收集所有执行机结果信息
环境配置:
1.调度机配置:
进入调度机jmeter/bin目录下(eg:apache-jmeter-5.1.1\bin),打开jmeter.properties文件修改remote_hosts配置,IP地址为执行机IP+端口号(默认1099,可修改),调度机也可作为执行机,即将调度机IP配在remote_hosts,多个执行机间以英文逗号分开(,)
#--------------------------------------------------------------------------- # Remote Hosts - comma delimited
remote_hosts=172.16.40.89:1099, 172.16.40.159:1099
#remote_hosts=localhost:1099,localhost:2010 # RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099
将 server.rmi.ssl.disable=false 改为true
#server.rmi.ssl.truststore.password=changeit
#
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
#---------------------------------------------------------------------------
# Include Controller
#---------------------------------------------------------------------------
2.执行机配置:
进入执行机jmeter/bin目录下(eg:apache-jmeter-5.1.1\bin),打开jmeter.properties文件修改remote_hosts配置,IP地址为本机IP+端口号(默认1099,可修改)
#--------------------------------------------------------------------------- # Remote Hosts - comma delimited
remote_hosts=172.16.40.159:1099
#remote_hosts=localhost:1099,localhost:2010 # RMI port to be used by the server (must start rmiregistry with same port)
将 server.rmi.ssl.disable=false 改为true
#server.rmi.ssl.truststore.password=changeit
#
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true
#---------------------------------------------------------------------------
# Include Controller
#---------------------------------------------------------------------------
GUI启动执行:
1.远程启动单个执行
调度机端进入bin目录中双击ApacheJMeter.jar文件/jmeter.bat文件,打开jmeter界面->运行->远程启动,此时可见设置的执行机->选中某个执行机启动

以上操作出现错误:
Connection refused to host: 172.16.40.159; nested exception is:
java.net.ConnectException: Connection refused: connect
错误原因:
执行机未启动jmeter-server
解决方法:
在对应的执行机中启动jmeter-server(linux 执行jmeter-server文件, windows 执行jmeter-server.bat文件),开启后在调度机上再次远程启动该执行机,并启动脚本

2.远程启动所有
调度机端进入bin目录中双击ApacheJMeter.jar文件,打开jmeter界面->运行->远程启动所有

以上操作出现错误:
Engine is busy - please try later
问题原因:
执行机已被启动,未停止,再次启动就会出错
解决方法:
远程关闭/停止所有执行机或者关闭已开启的执行机再次执行不会出现以上错误

Engine is busy - please try later 问题解决后,再次远程启动所有,此时出现错误:(只要出现以下问题就是服务器之间没有连通)
Error in rconfigure() method java.rmi.ConnectException: Connection refused to host: 172.16.40.159; nested exception is:
java.net.ConnectException: Connection refused: connect
问题原因:
vm中docker 机子ip 端口只对外网开放了1099.当启动如下命令去启动执行机,会每次跳不同的端口,所以没有办法启动执行机.需要指定端口
.\jmeter-server -Djava.rmi.server.hostname=172.16.40.159 (win10系统用.\)
解决方法:
进入执行机jmeter/bin目录下(eg:apache-jmeter-5.1.1\bin),打开jmeter.properties文件修改remote_hosts配置如下:
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099 # To change the default port (1099) used to access the server:
#server.rmi.port=1234
server.rmi.port=1099 # 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=1099
配置后此时执行机重启jmeter-server,调度机重启jmeter再次远程启动所有

当脚本中存在读取外部参数化文件(csv),远程启动所有,未报错,但执行机未执行脚本,查看log显示
2022-05-12 14:28:43,191 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, 172.16.40.159:1099)
2022-05-12 14:28:43,215 INFO o.a.j.e.ClientJMeterEngine: sent test to 172.16.40.89:1099 basedir='.'
2022-05-12 14:28:43,215 INFO o.a.j.e.ClientJMeterEngine: Sending properties {}
2022-05-12 14:28:43,218 INFO o.a.j.e.ClientJMeterEngine: sent run command to 172.16.40.89:1099
2022-05-12 14:28:43,218 INFO o.a.j.e.DistributedRunner: Remote engines have been started
2022-05-12 14:28:43,221 INFO o.a.j.g.u.JMeterMenuBar: setRunning(true, 172.16.40.89:1099)
2022-05-12 14:28:43,254 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, 172.16.40.89:1099)
2022-05-12 14:28:43,328 INFO o.a.j.g.u.JMeterMenuBar: setRunning(false, 172.16.40.159:1099)
原因:
当脚本中存在读取外部参数化文件(csv,txt),未将外部文件上传到执行机
解决办法:
a.不涉及跨平台:
将脚本中需要用到的外部文件都上传到执行机jmeter下的bin目录中(涉及到分布式压测时,csv配置路径一般都设置为相对路径)

文件上传到执行机后再次启动所有:

b.涉及跨平台:
查看jmeter属性:测试计划->添加->非测试元件->属性显示


查看system属性:user.dir,file.separator
file.separator


linux查看属性步骤如上
windows、linux系统的user.dir,file.separator是不一样的,此时可通过函数助手中 __P读取不同平台、不同 Jmeter 安装路径,自动获取 Jmeter 运行路径,然后通过拼接方式配置csv文件读取路径${__P(user.dir,)}${__P(file.separator,)}webadmin.csv,配置OK后,外部文件只需要上传到执行机的jmeter/bin目录下(linux、windows适用)


命令启动执行:
windows
jmeter -n -t D:\API\性能调优.jmx -r -l result.jtl # 启动所有执行机
jmeter -n -t D:\API\性能调优.jmx -r 172.16.40.159 -l result.jtl # 启动指定执行机
jmeter -n -t D:\API\性能调优.jmx -r -l result1.jtl -e -o test # 启动所有执行机,并生成报告
jmeter 之性能分布式压测的更多相关文章
- jmeter 分布式压测(windows)
单台压测机通常会遇到客户端瓶颈,受制于客户机的性能.可能由于网络带宽,CPU,内存的限制不能给到服务器足够的压力,这个时候你就需要用到分布式方案来解决客户机的瓶颈,压测的结果也会更加接近于真实情况. ...
- 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】
概述 本文我们将介绍如何使用JMeter+InfluxDB+Grafana打造压测可视化实时监控. 引言 我们很多时候在使用JMeter做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等 ...
- jmeter实现分布式压测步骤
环境说明:安装与控制机相同版本的jdk与jmeter 1.修改控制机中的jmeter.properties文件 将<remote_hosts=127.0.0.1>改为<remote_ ...
- jmeter(二十七)分布式压测注意事项
之前的博客:jemter(二十三):分布式测试简略的介绍了利用jmeter做分布式测试的方法,当时只是介绍了背景和原因,以及基本的配置操作,有同学说写得不够详细. 正好今年双十一,我司的全链路压测,也 ...
- jmeter之分布式压测
很多性能大牛说一台机器的压测其实不准确,于是搜索网上的分布式压测练习了一番 目录 1.环境准备 2.控制机和压测机配置 3.执行分布式压测 1.环境准备 1.1准备一台windows作为控制机(mas ...
- JMeter分布式压测实战(2020年清明假期学习笔记)
一.常用压力测试工具对比 简介:目前用的常用测试工具对比 1.loadrunner 性能稳定,压测结果及颗粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多. 2.Apache ab(单接口 ...
- jmeter进行分布式压测过程与 注意事项
jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式 ...
- jmeter分布式压测
stop.sh需要跑Jmeter的服务器上安装Jmeteryum install lrzsz 安装rz.sz命令rz jemter的压缩包 拷贝到/usr/local/tools下面unzip apa ...
- jmeter 分布式压测(Linux)
之前一篇博文写的是如何在Linux上使用jmeter压测,这篇介绍下Linux上jmeter的分布式压测. 和windows上的分布式类似,需要配置agent节点和控制机 一.Agent节点配置 1. ...
随机推荐
- 《HelloGitHub》第 78 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- MySQL用户也可以是个角色
前言 角色(Role),可以认为是一些权限的集合,一直是存在各个数据库中,比如Oracle.SQL Server.OceanBase等,MySQL 自从 8.0 release 才引入角色这个概念. ...
- OCI runtime exec failed: exec failed: unable to start container process: exec: "mongo": executable file not found in $PATH: unknown
前言: 今天按照以往在Docker安装MongoDB的方式安装,但是到最后使用mongo命令执行mongodb命令的时候一直执行不成功,最后还是按照官网的Issues解决了. 创建并运行一个Mongo ...
- 8.MongoDB系列之创建副本集(一)
1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...
- 【题解】CF1720C
题意简述 给你一个 01 矩阵,每一次你可以在这个矩阵中找到一个 \(L\) 型,将它全部变成 0.\(L\) 型的定义是在一个 \(2\times2\) 矩阵中,除开一个角之外的图形,其中必须包含至 ...
- 使用 etcdadm 快速、弹性部署 etcd 集群
Etcd 是一个可靠的分布式键值存储, 常用于分布式系统关键数据的存储:而 etcdadm 是一个用于操作 etcd 集群的命令行工具,它可以轻松创建集群.向现有集群添加成员.从现有集群中删除成员等操 ...
- python django超链接
之前用django框架打了一个简易的博客网站,现在说说怎么用django做超链接. 本文基于之前讲解的博客应用,如果只想学超链接请自行删减代码或评论提问. 首先,在templates文件夹下添加det ...
- HTML元素大全(1)
01.基础元素 <h1/2/3/4/5/6>标题 从大h1到小h6,块元素,有6级标题.是一种标题类语义标签,内置了字体.边距样式. 合理使用h标签,主要用于标题,不要为了加粗效果而随意使 ...
- ARM TrustZone白皮书部分阅读
嵌入式系统安全的一些解决方法及缺陷 外部硬件安全模块:在主SoC之外包含一个专用的硬件安全模块或可信元件,e.g. 手机的SIM卡.隔离仅限于可以从非易失性存储器运行的相对静态程序 内部硬件安全模块: ...
- IO多路复用的理解/演变过程
目录 阻塞IO 非阻塞 IO select epoll 总结一下. 阻塞IO 服务端为了处理客户端的连接和请求的数据,写了如下代码. listenfd = socket(); // 打开一个网络通信端 ...