Jmeter 分布式配置 博客分类: jmeter jmeter接口测试性能测试
使用Jmeter有一段时间了,却很少写总结。下午有个朋友向我询问jmeter分布式的配置,晚上回来顺便写点东西吧!
在使用Jmeter进行性能测试时,如果并发数比较大(比如某个项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能。
一、Jmeter分布式执行原理:
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
二、执行机(slave)配置:
1、JDK (所有测试机统一版本,我使用的是1.7)
1.1 安装JDK
1.2 配置环境变量:JAVA_HOME,JMETER_HOME,PATH,CLASSPATH
2、Jmeter(所有测试机统一版本)
2.1 官网下载,我使用的是apache-jmeter-2.13
2.2 修改jmeter-server文件(master、slave都要配置)
添加 RMI_HOST_DEF=-Djava.rmi.server.hostname=172.18.11.20(slave IP)
在这里说明一下,为何指定本机的IP呢,是因为有些公司采用的是双网卡或者更多网卡,如果不指定就会报错。(具体error msg 后面我会说)
2.3 master端修改jmeter.bat 文件
添加set rmi_host=- Djava.rmi.server.hostname=172.18.11.39(master IP)
set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%
2.4 在jmeter.properties中自定义端口(也可以不修改)
agent 默认端口为1999 ,我这里修改某台机器的端口为1888
server_port=1888
server.rmi.localport=1888
2.5 启动服务
比如我有2台agent 172.18.11.199,172.18.11.20(多台配置重复上面的2.1、2.2、2.3、2.4)
分别启动 jmeter_server.bat
三、调度机( master)配置:
1、修改jmeter.properties
添加 remote_hosts=172.18.11.20:1888,172.18.11.199:1889(多台 agent使用逗号隔开)
2、重新启动jmeter.bat
这里可以看到所配置的slave的IP:PORT,这里可以选择启动某一台,或者选择全部启动.(如下图)
四、注意点说明:
1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以master自身会有消耗,所以建议单独用一台机器作为master。
2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。
五、可能遇到的问题:
1、执行机(slave)启动jmeter-server服务时,提示:
Could not find ApacheJmeter_core.jar …
… Trying JMETER_HOME=..
Found ApacheJMeter_core.jar
这个是因为开始没有找到ApacheJmeter_core.jar,然后去JMETER_HOME目录下查找,最后找不到了。如果不希望看到Could not find的字样,可以配置一下jmeter_home的路径(即bin目录的上一级目录),这样启动jmeter-server服务时,就只会看到Found ApacheJMeter_core.jar,当远程访问时,会看到控制台上打印出一行:Starting the test on host [ip]:port @....(大概是这样的,@后面是执行开始的时间),远程执行结束,会打印一行:Finished the test on host [ip]:port @...,表示远程执行结束。
2、调度机(master)远程启动时如下图
原因分析:
Jmeter采用了rmi进行远程调用,在开启RMI服务时,如果服务端有多个网卡,它只是使用其中任意一个网卡,默认情况下,导致jmeter的master机器和slaves机器不在同一个网段内,无法互通,导致失败。
解决方法为:2.2、2.3中的配置
如有疑问,欢迎加 企鹅群:113097051