Jmeter分布式操作接口性能压测

操作步骤:

准备几个机器,分别叫他们Master、Slave...
1、修改Master机器中 jmeter.properties 中 remote_hosts例如:remote_hosts=172.16.4.152:1099,172.16.3.152:1099
2、修改Master机器中 jmeter.properties 中 server.rmi.ssl.disable=true
3、修改Slave机器中 jmeter.properties 中 server.rmi.ssl.disable=true
4、启动Slave机器中 jmeter-server.bat 监听Master机器发送的Http请求
5、Master机器启动 jmeter.bat,点击运行,见下图(运行原理:Master将脚本发送至Slave,Slave运行后将结果返回至Master

ps. 实际原理简单地说就是通过主机向从机分发你的jmx脚本,让从机执行,在主机汇集测试结果。jmx脚本里包含了线程数、循环次数等多种信息,所以从机与主机执行的内容是一模一样的。

常见问题:

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

解决方案:修改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:在slave上(linux系统)运行jmeter-server时,出现“An error occurred: Cannot start. localhost is a loopback address”错误

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

方法二:修改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 ”错误

解决方案:

1)查看slave上的ip与master配置文件中的ip是否一致;

如果不一致,查看slave机器上是否有虚拟网卡,将网卡关闭,在此启动Jmeter-server.bat,查看是否正确

2)查看防火墙是否关闭

注:centos7上关闭防火墙:  firewall-cmd --state   //查看防火墙状态

                           systemctl stop firewalld.service //关闭防火墙

问题4:当设置csv文件路径时,如果路径不对,无响应

解决方法:将csv文件以“相对路径”命名,即将csv文件直接放入bin目录下,在Jmeter路径中直接写入文件名

问题5:(Linux)默认端看1099被占用,如何关闭某个被占用端口的方法

1)netstat -ntlp //查看当前所以tcp端口

nestat -ntulp |grep 1109 //查看所有1109端口使用情况

2)lsof -i:1109 //查看占用1109端口的程序pid

3)kill -9 1109 //kill掉该进程

(windows)上关闭已被占用的端口

http://www.jb51.net/os/windows/203315.html

如1099端口被占用:1)在cmd命令行下输入以下命令:netstat  -aon|findstr "1099",回车之后就可以看见列表中的PID,然后根据PID在电脑的任务管理器中查看对应的占用程序,然后将其关闭即可;2)然后根据查询的PID找到对应的进程,我们可以看到占有1099这个程序的进程ID,如:5264,继续输入命令【tasklist|findstr "5264"】,5264就是进程ID,现在知道是哪个进程占用的我们的端口,即可在任务管理器中杀掉该进程。

问题6:如果使用slave发送数据后,长时间无响应

问题排查:

1)查看发送的数据中是否存在csv参数文件,查看slave机器的bin目录下是否有该文件;

2)查看建立的tcp采样器中属性“TCPClient classname”处是否添加协议:org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

问题7:如果你的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

解决方法:1)bin目录下打开jmeter.bat文件,查找set HEAP,将set HEAP=-Xms128m -Xmx512m修改为set HEAP=-Xms512m -Xmx512m;2)重新启动jmeter.bat即可

问题9:当jmeter用作数据库API测试时,如果数据库接口中参数中传递一个数组,如getApps(int nu, int appID[ ]),实际使用过程中报语法错误

解决方法:可尝试在调用该接口传参中加入关键字“ARRAY”,如getApps(3, ARRAY[7,8])

注意事项:

关闭电脑防火墙

Master及Slave需要在同一内网环境中

各个机器Jmeter版本最好保持一致

分布式压测时,如果Master机器查看结果树为空,需要将 jmeter.properties 中 mode=Standard 注释取消

原文地址:https://www.cnblogs.com/goal9248/p/14900001.html