在使用Jmeter进行性能测试时,如果并发数比较大时候,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,压测服务器已经由于模拟的压力太大变的很卡甚至死机,这时可以使用Jmeter提供的分布式测试的功能。
一、Jmeter分布式执行原理:
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,它应该是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
二、分布式压测环境部署
前提:
1、最好保证master和所有slave机器上的jmeter的版本相同
2、需要保证master和slave都在一个网络中,且在多网卡环境需要保证启动的网卡都在一个网段
3、如果windows系统作为master,Linux系统的服务器作为slave,还要注意master和slave的防火墙是否已经关闭,Linux系统的服务器关闭防火墙命令:
systemctl stop firewalld
systemctl status firewalld
systemctl disable firewalld
systemctl enable firewalld
步骤:
现在我的环境是master机器是windows机,一台slave机器是Linux系统机器。
1、master机器,打开jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=127.0.0.1,47.92.67.190(当有多个slave时,各个slave的ip中间用“,”分隔),
把默认的RMI端口号改成任意的值。
2、slave机器自定义端口号
进入Jmeter的bin目录,找到jmeter.properties文件,打开该文件修改如下两个配置项,比如修改端口号为:9870(默认端口号为:1099)
server_port=9870
server.rmi.localport=9870
运行jmeter-server文件,查看端口是否修改成功
3、slave机器jmeter jvm调优
为了掠尽所有执行机的硬件和网络资源,加强执行机的发压能力,还需要对每台执行机进行深度jmeter jvm调优(修改jmeter.bat中jmeter的内存参数,从512m调整为合适大小)
set HEAP=-Xms512m -Xmx4000m
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m
根据经验,堆值(HEAP)最多设置为物理内存的一半,默认设置为512m,如果堆值(HEAP)超过物理内存的一半,JMeter运行速度会变慢,设置会出现“内存溢出”的错误。
4、master机器上运行脚本,查看测试结果
运行->远程启动,选择要执行脚本的slave的机器
查看测试结果:
三、一些注意事项:
1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater
2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的
3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题
4、遇到执行失败时,可以查看调度机(master)和执行机(slave)上的Jmeter-server.log中的报错信息
比如: