Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制。
那么,是如何实现多台负载机同时运行的呢?我们通过单个jmeter 客户端就可以控制多个远程的jmeter服务器,使它们同步的对服务器进行压力测试。
通过远程运行jmeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力,一个jmeter客户端实例,理论上可以控制任意多的远程jmeter实例,并通过他们收集测试数据。
利用4台linux测试机部署jmeter:
1.安装jdk,运行jmeter一定要安装1.6以上版本的jdk并正确配置环境变量;
2.将Jmeter打包后放在指定的目录,所有期望运行jmeter的机器都要安装;
3.定义A服务器:控制机Controller,B、C、D服务器为负载机Agent;
4.首先在bin目录下 启动B、C、D服务器 jmeter的jmeter-server服务器,jmeter-server正常启动会提示"创建远程服务";
5.准备测试脚本,可以在windows环境下先创建jmx文件,主意最好不要添加监听器,因为命令行启动的话监听器可能会占用资源而且有没有任何视图效果.
6.将生成好的jmx文件上传到A服务器 jmeter目录的bin目录下,然后在bin目录下创建xx.jtl文件.jtl文件用来接收测试中产生的测试结果
7.进bin目录 打入启动命令,也可以用绝对路径来运行启动命令
./jmeter -n -t xx.jmx -R B服务器ip,C服务器ip,D服务器ip -l $jmeterpath/bin/xx.jtl
参数说明 :
-n 告诉jmeter使用nogui模式运行测试
-t 执行的测试脚本名
-R 后面跟随负载机的ip地址 ,注意用逗号隔开
-l 后面跟着测试结果记录的路径与文件名,主意这个文件jmeter不会自己创建,请预先创建好,
8.测试完成后把xx.jtl文件下载到windows机上在不同的监听器上分析测试结果
如果想修改测试脚本,起始也不必把脚本在windows机上打开gui界面修改,直接编辑.jmx文件 你就可以看到许多熟悉的名字,这里就简单介绍几个
</elementProp>
<stringProp name="ThreadGroup.num_threads">5</stringProp>
<stringProp name="ThreadGroup.ramp_time">5</stringProp>
<longProp name="ThreadGroup.start_time">1281132211000</longProp>
<longProp name="ThreadGroup.end_time">1281132211000</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<stringProp name="ThreadGroup.duration">60</stringProp>
<stringProp name="ThreadGroup.delay">5</stringProp>
</ThreadGroup>
ThreadGroup.num_threads 线程数
ThreadGroup.ramp_time 全部线程启动完成的时间
ThreadGroup.duration 测试的持续时间
windows下运行部署jmeter:
windows下部署和linux下大致相同,不同的地方有几点,如下:
1.在controller机器的jmeter的bin目录下,找到jmeter.properties 文件,编辑该文件:
找到 remote_hosts=127.0.0.1 将后面的ip地址写成负载的机器ip,以逗号进行分割,如192.168.0.1:1099,192.168.0.2:1099,其中的 1099 为 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号;
2.启动controller 机子上的jmeter应用jmeter.bat,选择菜单“运行”--->“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来将所有的agent启动。