监控JMeter压力机的性能
netstat -an | find "TCP" /C
处理过程:
一:调度机master启动以后,会拷贝本地的jmx文件分发到远程的slave机器上;
二:slave机器拿到脚本以后启动命令行模式去执行脚本,对于每台slave机器拿到的脚本都是一样的,所以如果jmx脚本为50个线程跑3分钟,那么实际并发就是50*3=150个线程并发跑3分钟;
三:执行时,slave会把执行获得的数据结果传给master机器,master机器会收集所有slave机器的信息并汇总,这样master机器上就存在一份所有slave机器汇总的数据结果。
注意事项:
一:我们注意到master机器启动后会拷贝jmx文件到slave机器,所以我们不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。
二:参数化文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。
三:调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为master。
四:保证每台机器的jmeter版本和插件版本相同,避免造成一些意外问题。
五:分布式测试总样本数 = 线程数 * 循环次数 * 执行机总数, 样本计数逻辑为:执行机slave执行的测试脚本是由调度机master分发的,故每台执行机执行的测试脚本都是相同的,故而性能测试总样 本数 = 测试脚本样本数 * 执行机总数,而测试脚本样本数为线程数 * 循环次数
2:说完了原理,现在我们来说如何做jmeter分布式测试
- 在所有需要做分布式的机器上部署java和jmeter,要求需要保证每台机器上部署的jmeter版本相同插件版本也相同,最好部署在同一路径下(这样如果有csv参数化比较方便)
jmeter底层用java开发,耗内存、cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式测试:
调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试结果收集汇总,报告产出。
执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面),并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据及详细断言信息。
比如我部署在
三台执行机(Slave)
192.168.1.161、192.168.1.162、192.168.1.163
调度机(Controller)为:
192.168.5.133
四台机器上,每台机器部署路径为:D:\apache-jmeter-3.0
一、执行机配置(Slave)
1、JDK版本为 1.7.0_80,配置相应的环境变量
注意:所有的jdk的版本需要一样,JMeter的版本也需要一样
2、JMeter版本为 3.0,配置相应的环境变量
3、配置执行机服务器远程启动端口
修改3台slave机器
192.168.1.161、192.168.1.162、192.168.1.163压力机中
%JMETER_HOME%/bin/jmeter.properties文件中server_port端口号为机器未被占用的端口号,一般默 认为1099,此处我修改为7890(可以使用默认端口或者改成其他端口,只要未被占用就行),remote_hosts为127.0.0.1不需要修改
server_port=7890
#server.rmi.localport=1029
修改完成保存,我配置的3台机器为:
192.168.1.161机器(remote_hosts:127.0.0.1、server_port:7890)
192.168.1.162机器(remote_hosts:127.0.0.1、server_port:7890)
192.168.1.163机器(remote_hosts:127.0.0.1、server_port:7890)
4、启动执行机服务器
管理员执行脚本:JMETER_HOME/bin/jmeter-server.bat 或 JMETER_HOME/bin/jmeter-server,启动后命令行页面如下图所示:
二、调度机配置(Master)
完成slave机器的配置后,此时配置master机器,我的1台master机器为192.168.5.133
注意到由于master机器作为调度机本身会有一定的性能消耗所以我们配置远程执行机的时候并没有把master机器配置进去,只配置了3台执行机
从启动命令行窗口可见,配置的远程启动端口已经生效。
jmeter -JthreadNum=100 -Jtime=200 -n -t D:\apache-jmeter-3.0\bin\log.jmx -r -l D:\apache-jmeter-3.0\thinkive\resultReport\jtl\log.jtl