一、前提:

3台服务器,IP分别为:A、B、C

操作系统:不限(windows\linux均可)


二、操作步骤:

1.分别在3台服务器上安装java运行环境,jdk 1.6或更高


2.分别配置好java的环境变量

windows下:


新建变量:

变量名:ClASSPATH          变量值:,;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

变量名:JAVA_HOME       变量值:JDK的安装路径,如C:\Program Files\Java\jdk1.6.0_26

PATH已存在,修改下即可    变量名:Path,在已有的变量值前增加:%JAVA_HOME%/bin;%JAVA_HOME%/jar/bin;


检测是否配置成功:

最后在cmd中运行  javac  、java 、 java -version  如果能正确打印出来,就说明配置java成功


linux是修改 /etc/profile文件,增加以下文本即可:

export JAVA_HOME=/usr/share/jdk1.6.0_14 (安装目录)
export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 


3.将Jmeter安装包拷贝到3台机器的任意目录下

如:从官网下载Jmeter-2.13版本,apache-jmeter-2.13.zip,将其解压,放置D盘根目录(哪儿都成)

注:各个服务器安装的版本要一致,使用的jar也要一致,否则会报错;


4.假定设置A为ctroller,B、C为agent

windows环境下,则需要修改A的jmeter的bin目录下的jmeter.properties中的remote_hosts,Linux则不用

如:remote_hosts=127.0.0.1,192.168.60.243:1099,192.168.60.212:1099

其中:

a.若本机同时也要参与并发,则写上127.0.0.1,否则不用;

b.192.168.60.243和192.168.60.212分别为B和C的IP;

c.1099为默认端口号;

d.各IP间用逗号分隔


5.配置测试计划

windows下用gui模式去编辑测试计划,存为jmx文件

注:

若是给linux下运行,则不加任何监听器,只在运行命令处添加写文件

windows下,也可以只添加Simple Data Writer监听器,写明路径,去掉其它监听器,消耗的资源更小


6.启动服务

windows下,A、B、C均启动jmeter-server.bat,若A只作controller不参与并发,则不用启;

linux下,A、B、C均启动jmeter-server,若A只作controller不参与并发,则不用启;


7.执行脚本

windows下,点击run->remote start all,或者快捷图标spacer.gif,若想执行单台,则点击run->remote start 列表下对应的IP


linux下,在bin目录下运行命令: ./jmeter -n -t sql.jmx -R A服务器ip1,B服务器ip,C服务器ip -l result.jtl

其中:

-n 表示nogui模式执行

-t 表示测试计划的文件,即后面的sql.jmx(自定义文件名)

-R  表示要远程的机器的IP(不需要端口号)

-l 表示结果保存的路径(自定义,需要注意的是本文件jmeter不会自动创建,需要在运行前手动创建好)


8.查看结果

windows下,直接在各种监听器下查看即可

linux下,把result.jtl放到windows下,用Jmeter打开,用各种监听器来查看(在任意testplan中添加任意监听器,点击右侧页面中的brower,打开result.jtl文件,jmeter会自动分析,并给出结果)

问题:

jmeter 2.13给出的result.jtl第一行是空的,少了各项的名称,可以将以下一行添加至文本第一行,即可打开:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,bytes,grpThreads,allThreads,Latency

也可以直接将第一行的空行删掉即可分析,它会走默认的配置项,经验证是正确的;

另外,分析结果的时候,每分析完一个文件,就得清一下结果,否则相同label的会叠加到一起,结果就是叠加后的错误结果;或者可以将label即各request名称设为不同,则不会叠加


三、说明:

1.jmeter不会在执行期间做负载均衡,而是每一台机器都完整地执行整个测试计划,所以Jmx里若设置了并发500,则所有机器各并发500:如3台,则并发1500

2.如用到了本地文件参数化,则需要把文件上传到3台机器上,且路径一样

3.我自己的机器4g内存,跑500没问题,远程一台共跑2台并发1000也没问题

4.远程会比单台更耗资源,所以远程多台时若controller所在服务器性能不好,可能产生内存溢出或网络阻塞等问题

5.linux压测时,最好不要加任何的监听器,因为太耗性能了,只存jtl结果文件即可,结束后再用监听器进行分析