在使用Jmeter进行接口的性能测试时, 由于Jmeter是JAVA应用, 对于CPU的内存消耗比较大, 所以, 当需要模拟数以万计的的并发用户时, 使用单台机器模拟所有用户并发就会有些力不从心了, 还会引起JAVA的内存溢出错误, 为了让Jmeter工具提供更大的负载能力, 这时可以使用Jmeter提供的分布式功能来启动多来电脑实施压力测试。
Jmeter分布式原理
- Jmeter分布式执行时,选择其中一台作为控制机(Controller),其它机器作为代理机(Agent);
- 执行时,Controller会把脚本发送到Agent上,Agent拿到脚本后开始执行,Agent执行时不需要打开Jmeter,只需要打开Jmeter-server.bat
- Agent会把结果回传给Controller, Controller会收集所有Agent信息并且汇总;
控制机(Controller)配置:
- Controller需要安装JDK、Jmeter,并且配置好环境变量;
- 查看本机IP
ipconfig
例如:192.168.10.180; - 打开Jmeter/bin/jmeter.properties,找到
remote_hosts=127.0.0.1
, 把这一行修改为emote_hosts=192.168.8.1789:1099,192.168.10.180
;如果有多台代理机,这里需要把所有的代理机的IP地址和端口号都加入进来。 - 配置完后启动jmeter-server.bat, 但是会报错, 提示要加密了, 此时双击
create-rmi-keystore.bat
然后根据提示信息一致填下去, 遇到yes或者no就直接填Y, 然后回车就ok了, 然后把生成rmi_keystore.jks
复制到每一台Agent的bin
目录下; - 然后Controller执行jmeter-server.bat
代理机(Agent)配置
- Agent需要安装JDK、Jmeter,(版本要与Controller一致)并且配置好环境变量;
- 查看本机IP
ipconfig
例如:192.168.10.178; - 打开Jmeter/bin/jmeter.properties,找到
remote_hosts=127.0.0.1
, 把这一行修改为emote_hosts=192.168.8.178:1099
; - 点击jmeter-server.bat就设置完成了, 等待控制机(Controller)启动;
测试结果
此时打开Jmeter添加一个请求(记得添加一个聚合报告方便查看测试结果), 线程数设置为n个, 然后点击导航栏运行----远程全部启动, 等执行完毕后查看聚合报告Samples
如果是线程数的两倍就表示成功啦!
注意
如果有参数化文件,那么在负载机同样的位置上也得有一个参数化文件