Jmeter分布式压测记录
资源下载
jmeter 安装包:链接:https://pan.baidu.com/s/1IXi_xekIzvU9jdYFqmt-JA 密码:857y
JDK下载链接:链接:https://pan.baidu.com/s/1zI1yp42FOOZNi_zOD-xXvw 密码:zdzt
旧版本jmeter插件官网:https://jmeter-plugins.org/downloads/old/
调度机配置
调度机进入到jmeter的安装目录下的bin文件夹,找到
jmeter.properties
配置:
remote_hosts=xxx.xxx.xx.xxx:1099,xxxx.xxxx.xxx.xxxx:1099
如果需要让自己机器也负载的话把自己IP也加上localhost:1099 逗号隔开。
加上自己机器后,自己机器也要打开 jmeter-server.bat文件,
目前你还不清楚此文件
,请先看下边。
注意端口默认1099,本地调度机如果也要干活儿,就如上 添加localhost:1099。
本地机器也要开启jmeter-server,Linux/Mac下直接运行./jmeter-server(Windows下jmeter-server.bat)
查找 server_port=1099修改
server_port=1099 查找到是这样 把前面#与去掉。
查找server.rmi.localport=修改为:
server.rmi.localport=1099 前面有#号的去掉#号 端口写1099
重启jmeter,如下:
至此调度机配置结束。
负载机配置
前提条件:负载机使用的jmeter版本需要和调度机版本保持一致。jdk版本最好也要保持一致,防止出现幺蛾子!
远程到负载机,将本地的jmeter打包传到负载机上去,解压后,找到bin目录下的jmeter-server(Windows系统找jmeter-server.bat)
然后运行:
./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
xxx.xxx为你当前机器的IP地址。无需指定端口号,端口号默认1099。
出现:
Created remote object: UnicastServerRef [liveRef: [endpoint:1x.xxx.x.xxx:45781,objID:[3a2cabe3:16e87bac70c:-7fff, -275550698911741061]]]
说明负载机启动成功。负载机配置结束。
坑:
注意,负载机要开放该端口(1099)的访问权限。
关闭防火墙或者设置端口白名单(1099)。
防火墙操作:https://blog.youkuaiyun.com/baidu_36124158/article/details/90603496
禁用虚拟网卡(ifconfig查看所有网卡,然后,ifconfig 虚拟网卡名字 down关闭虚拟网卡),否则会出幺蛾子。如果不想禁用,也是有办法指到正确的IP地址的,方法自行百度。
被测服务资源使用监控配置
远程执行
坑1:本地不应该以GUI的形式控制本机和远程机器运行测试,因为GUI形式的执行非常消耗内存,正确的方式应该是:
jmeter -n -t /Users/dingtone/testTools/apache-jmeter-3.1/bin/IPlocation.jmx -l ./result/ -r
-n 表示不以GUI形式运行测试
-t 表示被执行脚本
-r 表示根据jmeter配置文件中的远程负载地址,以远程的方式运行测试
-l 表示报告生成的地址
坑2:
脚本使用到的csv文件,资源文件需要以相对路径的形式添加在脚本中,否则远程机器的脚本在执行过程中会找不到该文件,同理,脚本依赖的csv文件等资源需要分别上传到远程负载机上的对应目录下。jmeter会主动分发脚本到负载机,但是不会主动分发依赖资源。
坑3:
远程负载机不仅需要在jmeter版本,jdk版本上与调度机保持一致,而且jmeter安装的插件也需要与调度机保持一致,否则没有安装对应插件的负载机会报错。坑人的是负载机只是起一下就down掉了,没有任何提示,MMP 至少命令行没有,可能log文件里会报错。
总结:
不要一味在网上找答案,遇到错误的原因千差万别,需要自己对使用的工具的工作原理有所了解,自己思考工作原理中的某个工作流程可能导致的现在的问题,再根据推断去验证自己的想法,才能少走弯路的解决自己的问题。排查错误的利器一个是看命令行打印的错误,还有就是log文件非常重要!