jmeter分布式压测
1.系统要求并发用户为10000,此时无论配置再高的压力机,单台jmeter均无法模拟并发10000线程,需要通过分布式压测方案来实施
关于远程测试,参考jmeter官方文档:https://jmeter.apache.org/usermanual/remote-test.html
架构图如下:
2.需要注意几点:
<1>.master,slave机器都要关闭防火墙或者slave机器开放1099端口(slave机器默认占用1099号端口):
linux压力机开放指定端口命令:
$ iptables -I INPUT -p tcp --dport 1099 -j ACCEPT
<2>.master,slave ,测试服务器最好都在一个子网下(最低要保证压力机和服务器是在一个子网下),否则带宽会受到影响,在局域网下带宽通常都是1G左右,可以使用iperf3 测试下
<3>.master,slave 机器的jdk版本,jmeter版本必须一致
<4>.slave机器需要禁用SSL ,修改slave机器jmeter.propertis文件 server.rmi.ssl.disable=true
<5>.slave机器默认占用 1099端口,如果冲突了可以修改jmeter.propertis文件server_port:
<6>.远程启动slave机器时,master会发送测试脚本给slave,slave机器各自执行相同的测试脚本,如果脚本中设置的线程
数是2000,slave机器数量为2,那么相当于并发4000线程
<7>.master机器需要设置slave机器的IP地址,这里的 master是windows,修改jmeter配置文件jmeter.properties 添加remote_hosts
<8>.master机器也需要禁用SSL
<9>.为了防止压测中内存溢出,修改jvm堆内存大小
windows下修改jmeter.bat:
set HEAP=-Xms2g -Xmx4g -XX:MaxMetaspaceSize=256m
linux下修改jmeter.sh:
3.启动slave机器:
这里的 slave机器为linux,已关闭防火墙,并禁用SSL,进入jmeter的bin目录下(如果配置了环境变量则不需要),执行如下命令:
./jmeter-server -Djava.rmi.server.hostname=压力机ip地址
如果启动报错则可能是:
1.linux防火墙未关闭,需要关闭防火墙或开放1099端口
2.1099端口被占用,可以修改 jmeter.propertis文件remote_port
3.当前用户不是root,无权限
4.未禁用SSL
5.jmeter已启动
执行成功如下图所示:
4.启动master机器
这里使用jmeter 命令行方式启动,命令如下:
jmeter -n -t D:/Jmeter/tsf.jmx -r -l D:/Jmeter/tsf/tsf.log -e -o D:/Jmeter/tsf/report