一、前提:
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,或者快捷图标,若想执行单台,则点击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结果文件即可,结束后再用监听器进行分析