jmeter linux下分布式压测部署说明
多台 linux 分布式测试
先来理解下分布式测试原理,看下图:
1、Jmeter 分布式测试时,选择其中一台作为调度机 (master/Controller),其它机器做为执行机 (slave/Agent)。
2、执行时,master 会把脚本发送到每台 slave 上(csv有依赖的话还是要在每台slave上上传,且路径一致),slave 拿到脚本后就开始执行,slave 执行时不需要启动 GUI,应该是通过命令行模式执行的。
3、执行完成后,slave 会把结果回传给 master,master 会收集所有 slave 的信息并汇总。
注意:
(1)每一台 jmeter 远程服务器(slave 机器)都执行相同的测试计划,jmeter 不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划;
(2)采用 JMeter 远程模式并不会比独立运行相同数目的非 GUI 测试更耗费资源。但是,如果使用大量的 JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞;
(3)默认情况下,master 机器是不执行参与生成并发数据的;
(4)调度机 (master) 和执行机 (slave) 最好分开,由于 master 需要发送信息给 slave 并且会接收 slave 回传回来的测试数据,所以 mater 自身会有消耗,所以建议单独用一台机器作为 master
具体步骤如下:
1、master和slave的linux 上安装 jdk 和 jmeter(jdk 和 jmeter 的版本以及安装路径要保持一致,不然可能会出错,无法成功执行)
2、
master配置:
- jmeter.properties文件,remote_hosts配置上slave端的IP和端口号(端口号默认1099),多个slave地址用逗号分隔;
- Master上已上传脚本文件和参数化文件;
slave配置:
- jmeter.properties文件,server.rmi.ssl.disable=true;
- Slave上参数化文件(如csv配置文件)要放在jmeter的bin目录下;
3、slave上修改jmeter/bin/jmeter-server
-删除注释并将value修改为slave的IP地址
RMI_HOST_DEF=-Djava.rmi.server.hostname=10.1.44.123
在slave上启动 :jmeter-server -Djava.rmi.server.hostname=ip 或者如下指令 nohup ./jmeter-server -Djava.rmi.server.hostname=10.1.44.123
参照该文档:https://www.jianshu.com/p/347d889cc327
4、在master上,打开配置文件 /bin/jmeter.properties 配置 agent 节点的 IP,如 123和122是两台slave机器的ip
# Remote Hosts - comma delimited
remote_hosts=10.1.44.123:1099,10.1.44.122:1099 #代理机ip和端口,可填写多个,配置的是slave的ip和端口
#remote_hosts=localhost:1099,localhost:2010
# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099
5、执行脚本测试: jmeter -n -t test.jmx -R 10.1.44.122,10.1.44.123 -l test.jtl
常见问题:
问题 1:
在 slava 机器上执行 jmeter-server 的时候,会出现以下的问题:
1、出现 XII DISPLAY 这样的错误,可以先执行下面命令:
echo $DISPLAY
如果内容为空(我就是内容为空),那么,就继续执行下面的命令:
DISPLAY=:0 #DISPLAY=localhost:0.0
上面两个都可以
问题 2:
jmeter-server 启动失败。通常有以下两个错误:
1、Unable to get local host IP address
2、xxx is a loopback address
一般上面的两个问题,都是由 host 文件引起的,我们需要修改 host 文件,可以执行下面的命令:
vi /etc/hosts
我是将 127.0.0.1 替换成本机 ip 地址的。
针对 “xxx is a loopback address” 这个问题,我们还可以通过执行下面的命令来指定 ip,从而避免掉该错误:
./jmeter-server -Djava.rmi.server.hostname=ip
问题 3:
jmeter-server 启动成功,但是在 master 上无法执行分布式测试。
我这边抛出的错误是:”No route to host“
这个问题是由防火墙引起的,也就是说,slave 上的防火墙没有关闭,此时,我们需要到 slave 上关掉防火墙。之后就可以正常运行了。关闭防火墙的方法多种,我这里特别记录下我自己红帽子 7 虚拟机的命令:
#查看防火墙状态 systemctl status firewalld #关闭防火墙 systemctl stop firewalld
问题4:查看是否有多余进程
注意查看jmeter是否有多余的进程 ps -aux| grep jmeter 查看,杀掉进程的话kill -9 pid
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通