Jmeter分布式压测实战及踩坑处理(含参数化)
项目中使用Jmeter进行大并发压测时,单机受限内存、CPU、网络IO,会出现服务器压力还没有上
去,但压测服务器由于模拟的压力太大死机的情况。JMeter的集群模式可以让我们将多台机器联合起来
一起产生负载,从而弥补单台机器负载生成能力不足的问题。
分布式压测原理


1、控制机为Master,负载机为Slave
2、Master启动后,会拷贝jmx脚本文件到所有的Slave上
3、Slave会回传压测数据给Master,最后由Master汇总出结果文件
注意事项
1、脚本文件上传到master即可,不用所有的slave都传一份
2、所有机器最好在同一个网段
3、由于master需要发送信息给slave并接收slave回传回来的测试数据,自身会有一定的消耗,建议单独
配置一台机器作为master
4、所有机器的jmeter版本和插件版本要一致
5、如果jmeter版本在4.0以上,需在jmeter.properties中设置 server.rmi.ssl.disable=true
分布式环境配置
Slaves机器配置
编辑所有slave机器jmeter/bin目录下的jmeter.properties文件,slaves机器上remote_hosts不动,根
据需要修改服务端口。默认端口为1099,可以修改为任意未被占用的端口。我这里默认端口没有被占用,
就不做修改。
# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010 # RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099
Master机器配置
编辑master机器jmeter/bin目录下的jmeter.properties文件,将所有slave机器的地址配置到文件中,
server_port不用修改。
# Remote Hosts - comma delimited
remote_hosts=166.188.20.86,166.188.21.75(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
master机器也可以作为负载机,在remote_hosts中加上127.0.0.1即可,但考虑到自身消耗,这里
不使用。如果修改了负载机的端口号,则需带上修改后的端口号,我这里使用的默认值,不用再单独
标注。修改了端口号使用如下配置:
# Remote Hosts - comma delimited
remote_hosts=166.188.20.86:2099,166.188.21.75:2099
#remote_hosts=localhost:1099,localhost:2010 # RMI port to be used by the server (must start rmiregistry with same port)
server_port=2099
参数化文件配置
参数化文件的路径要保持一致,我这里配置在jmeter/bin目录下。注意:所有的slave机器都要上传一
份参数化文件。


分布式压测执行
Slave机器执行
在所有的slave机器上执行 ./jmeter-server 命令,出现以下界面为执行成功。

Master机器执行
确认好所有slave机器都正确启动后,在master机器上执行命令
jmeter -n -t stress0804.jmx -r -l testResult.jtl
命令解析:
- n 非GUI模式运行
- t 要运行的jmx文件
- r 将远程所有的agent启动
- l 生成结果文件
执行结果:

脚本中设置了5个线程,有2台负载机,所有Active为5*2=10个,运行时间2分钟。
常见问题处理
问题一
[test@localhost bin]$ ./jmeter-server
Writing log file to: /home/test/jmeter/apache-jmeter-3.1/bin/jmeter-server.log
Created remote object: UnicastServerRef [liveRef: [endpoint:[127.0.0.1:37863](local),objID:[-3217392f:17b104e6552:-7fff, 742049333908920389]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.
解决方法:执行命令中指定本地IP ./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
问题二
[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[:39308](local),objID:[24e78a63:16243c70661:-7fff, 7492480871343944173]]]
Server failed to start: java.rmi.RemoteException: Cannot start. Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
An error occurred: Cannot start. Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
解决方法:使用hostname命令获取机器名称,追加一个映射iZwz95j86y235aroi85ht0Z
[root@iZwz95j86y235aroi85ht0Z bin]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
120.79.160.143 iZwz95j86y235aroi85ht0Z
windows中修改c:\windows\system32\drivers\etc\hosts文件,增加一条域名与IP的映射
问题三
[root@iZwz95j86y235aroi85ht0Z bin]# ./jmeter-server
Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
An error occurred: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
解决方法:编辑jmeter.properties文件,将server.rmi.ssl.disable的值改为true
问题四
slave机器无法启动或者没有返回执行数据
解决方法:
1、检查master机器和slave机器能否ping通
2、检查防火墙
3、检查master机器和slave机器的服务器时间是否一致
Jmeter分布式压测实战及踩坑处理(含参数化)的更多相关文章
- 压力测试(八)-多节点JMeter分布式压测实战
1.Jmeter4.0分布式压测准备工作 简介:讲解Linux服务器上jmeter进行分布式压测的相关准备工作 1.压测注意事项 the firewalls on the systems are tu ...
- JMeter分布式压测实战(2020年清明假期学习笔记)
一.常用压力测试工具对比 简介:目前用的常用测试工具对比 1.loadrunner 性能稳定,压测结果及颗粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多. 2.Apache ab(单接口 ...
- jmeter 分布式压测(windows)
单台压测机通常会遇到客户端瓶颈,受制于客户机的性能.可能由于网络带宽,CPU,内存的限制不能给到服务器足够的压力,这个时候你就需要用到分布式方案来解决客户机的瓶颈,压测的结果也会更加接近于真实情况. ...
- jmeter分布式压测对master、slave防火墙配置
首先要了解jmeter分布式压测的基础概念:master为统计结果的服务器,slave为各台压力机,如下图所示 一.结论 针对master 1.修改jmeter.properties的client.r ...
- 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. ...
- JMeter——分布式压测
一.Jmeter4.0分布式压测准备工作 压测注意事项 the firewalls on the systems are turned off or correct ports ...
- jmeter分布式压测原理简介1
1.什么叫分布式压测? 分布式压测:模拟多台机器向目标机器产生压力,模拟几万用户并发访问 2.分布式压测原理:如下 3.更多补充.....待添加
- jmeter分布式压测 java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
解决办法:1.控制机和代理机:修改jmeter.properties中server.rmi.ssl.disable=true 不启动SSL2.控制机和代理机: Slave(从压力机)启动jmeter- ...
随机推荐
- Java知识复习(一)
Java面向对象的三大特性: 封装.继承.多态. super()与this()的区别? This():当前类的实例,一个类,如果继承了父类,那么通过this既可以访问当前类的属性和方法,也可以访问父类 ...
- 【.NET 与树莓派】TM1638 模块的按键扫描
上一篇水文中,老周马马虎虎地介绍 TM1638 的数码管驱动,这个模块除了驱动 LED 数码管,还有一个功能:按键扫描.记得前面的水文中老周写过一个 16 个按键的模块.那个是我们自己写代码去完成键扫 ...
- 数据权限筛选(RLS)的两种实现介绍
在应用程序中,尤其是在统计的时候, 需要使用数据权限来筛选数据行. 简单的说,张三看张三部门的数据, 李四看李四部门的数据:或者员工只能看自己的数据, 经理可以看部门的数据.这个在微软的文档中叫Row ...
- Java实现适配器模式
适配器模式(Adapter) 适配器模式涉及到3个角色:要被适配的接口,适配器,目标接口 适配器的工作就是将被适配的接口转换为目标接口 "鸭子类型"就是一个典型的适配器模式:如果它 ...
- Kubernetes使用节点亲缘性将POD调度到特定节点上
节点污点可以用来让pod远离特定的节点,尽量在不修改已有pod信息的前提,通过在节点添加污点信息,来拒绝pod在某些节点上的部署. 而现在介绍一种叫做节点亲缘性,通过明确的在pod中添加的信息,来决定 ...
- POJ 1556 计算几何 判断线段相交 最短路
题意: 在一个左下角坐标为(0,0),右上角坐标为(10,10)的矩形内,起点为(0,5),终点为(10,5),中间会有许多扇垂直于x轴的门,求从起点到终点在能走的情况下的最短距离. 分析: 既然是求 ...
- 使用命令行操作MySQL 及 语法
在使用之前先要确保服务中的MySQL 已启动,否则会报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061 ...
- 【重学Java】Stream流
Stream流 体验Stream流[理解] 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把&q ...
- 报错处理:end Kernel panic - not syncing: Out of memory and no killable processes
报错如下: end Kernel panic - not syncing: Out of memory and no killable processes [ 2.113892] [<fffff ...
- C语言:键盘输入
C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个 ...