JMeter分布式部署
在压力测试中,有一个常见问题就是压测机自身性能不行,无法提供满足要求的压力,达不到性能瓶颈,从而不能够满足测试的目的。在单台压力机性能不足但是有其他可用的压力机这种情况下(有多台虚拟机,但每台的性能都不够强),可以使用分布式部署 1主多从的方式,充分利用多台服务器的性能,提供足够并发压力来满足测试需要。笔者使用这种方式,利用15台服务器的压测集群达到了3W并发请求的压力。
分布式部署为一个主控端,多个被控端。主要是配置被控端。均需要部署在linux上,目前发现windows作为主控端访问linux被控端会特别卡。
需要被控端先启动 jmeter-server,主控端通过rmi 访问。
需保证主控端能够访问被控端的IP地址
如果有额外的插件或数据源(如csv等),主控端被控端都需要增加
linux系统参数优化。linux默认最大连接数1024,在压测过程中经常会出现连接数不足导致的异常,需要先调整系统参数再做测试。
vi /etc/sysctl.conf
vm.max_map_count=655360
vm.swappiness=1
fs.file-max=655356000
fs.nr_open=104857600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
修改完毕后执行下面命令生效
/sbin/sysctl -p
vi /etc/security/limits.conf
root soft nofile 1048576
root hard nofile 67108864
root soft nproc 102400
root hard nproc 655360
* soft memlock unlimited
* hard memlock unlimited
注:vi编辑器,按下 i 进入编辑模式。shift + insert 粘贴,编辑完成后按 esc 退出编辑模式,输入 :wq 保存并退出
主控端 linux
- 修改 {dir}/bin/jmeter.properties 内的 server.rmi.ssl.disable=true ,注意把注释去掉,关闭ssl,不然还要配置证书。此点被控端主控端需保持一致
- 将编辑好的脚本生成 jmx
- 使用命令行启动jmeter -R 后写被控端IP和端口号,多个被控端使用 , 分隔。 -l 存储结果 -e -o 输出html的地址
- 脚本注意要设置持续时间或者循环次数,到达指定时间或次数后会自动停止开始生成报告。设置错误可能导致测试无法中止,只能够手动关闭。手动关闭无法生成报告
启动命令 ./jmeter -n -t ../test2.jmx -R 192.168.0.140:8123,192.168.0.156:8123 -l ../results/5.jtl -e -o ../results/html5
被控端 linux
- 修改 {dir}/bin/jmeter.properties 内的 server.rmi.ssl.disable=true ,注意把注释去掉,关闭ssl,不然还要配置证书
- 修改监听IP,可以使用 ifconfig 查看本机IP。修改 {dir}/bin/jmeter-server 内RMI_HOST_DEF=-Djava.rmi.server.hostname={IP} 注意把注释的 # 去掉。
如RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.181 - 调用端口默认1099,如需修改,修改 {dir}/bin/jmeter-server 内的 SERVER_PORT:-1099 改这里
- 配置修改号后,启动 jmeter-server ,等待主控端发指令
最后整理下步骤
- 使用jmeter可视化界面编写压力测试脚本,并且调试完成
- 部署被控端和主控端jmeter,并且修改好配置
- 将编写好的jmx脚本放到主控端中
- 在主控端启动测试,可以通过命令行参数来指定循环次数和执行时间,同时指定有代表性的html文件夹名称,方便后续访问
- 等待测试执行完毕并生成测试报告html文件
- 打开html/index.html 查看测试报告,建议用nginx开始auto_index来访问
注意事项
- 如果执行的测试过多,主控端最终生成报告时会非常慢,还可能内存不足,要提高jmeter使用的java虚拟机的内存配置。必须等待测试程序自己完成才行,否则测试报告会无法访问
- 如果并发非常大时,首先造成的是网络瓶颈,必须修改网络连接参数以满足连接数的需要,否则并发压力在网络层就已经阻塞了,无法打到业务服务器上,会达不到测试的目的
作者:Zone_
链接:https://juejin.cn/post/7050030315942707236
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。