jmeter实现本地控制端通过分布式远程服务器(Linux)并发性能测试

 

参考文章:https://www.cnblogs.com/Byronlyu/p/6950280.html

一、背景:

  1. 之前在Jmeter插件监控服务器性能一篇中说到,在非GUI环境中监控时为了保存监控数据需要修改jmeter脚本,并且每次通过施压机(远程服务器,非GUI环境)来压测时都要将jmeter脚本上传然后在服务器上通过命令行启动,测试完成后再把结果数据下载到本地GUI环境中查看,总是有很多不方便。
  2. 本次压测需求需要很大的并发量,例如3000,但是单台施压机难以实现,因此希望多台施压机并行,并且我能同步控制它们。
  3. 在这样的需求下经过了解,jmeter工具本身有一个很强大的远程启动功能,于是尝试了一下。

二、jmeter分布式原理

  1. 这个远程启动,网上说的高大上一点,就是jmeter的分布式控制~ 具体控制如下图:

2.客户端机器作为一个控制器controller,控制多台slave机器的操作。

3.controller通过GUI界面启动slave机器,将jmeter压测发送给每台启动的slave,slave获得脚本后开始执行。slave本地不需预先存储脚本;

4.各台slave执行完成后,将结果传回给controller,controller收集整合显示。

三、jmeter远程启动配置

服务器(slave)配置

  1. 服务器(slave)需安装jmeter,最好与客户端(controller)保持同版本,jdk最好也保持同版本,无法满足时至少保证服务器上的jmeter能正常运行(如jmeter3.0以后需要jdk1.7及以上版本)。
  2. 在slave的%JMETER_HOME%bin目录下执行./jmeter-server命令启动jmeter服务就可以,启动成功如下图:

3.注意:上图红框中的ip为服务器的ip地址,当服务器有多网卡时它会随机挑选一个网卡使用,红框中的端口号port为启动jmeter服务监听的port,一般会有个默认端口号1099,但最好自定义,确保端口号不冲突。修改方法在下文介绍。

客户端(controller)配置

  1. 在客户端上要保证执行命令能发送到服务器,因此需配置客户端远程的ip地址和port。在客户端安装目录的bin文件夹下,找到jmeter.properties,修改配置如下图,其中ip和port即为上一步slave的ip和port,如上图中jmeter-server启动时红框中显示的内容。多个slave机器的配置可通过逗号分隔。

    remote_hosts=10.165.124.6:1029
  2. 配置完成后打开客户端jmeter的GUI界面,在运行-远程启动中即可看到自己配置的slave机器。

3.添加一个脚本,点击远程启动即可启动运行slave机器,此时在服务器上可看到控制台信息,在客户端通过监听器-聚合报告或察看结果数可看到执行结果。

四、问题

slave机器的自定义端口号配置

  1. 在slave机器的%JMETER_HOME%bin目录下找到jmeter.properties,修改如下两项配置,即可自定义端口号:

    server_port=1029
    server.rmi.localport=1029
  2. 修改后执行服务端的jmeter-server即可看到控制台消息中修改是否生效;修改生效后需在客户端修改相应的jmeter.properties下的remote_hosts。

slave机器和客服端多网卡的问题

  1. 我在执行过程中slave机器的jmeter-server.log和客户端的jmeter.log中均报错提示connect refused。经过检查后发现服务器上有2个网卡,客户端有两个网卡,两台机器通过vpn在内网环境通信。而jmeter在远程通信的时候是随机选择一个网卡的ip,这样很容易导致连接不成功。
  2. 可通过如下配置指定服务器和客户端的网卡,在服务器端的jmeter-server文件中,修改配置指定服务器端的网卡ip

    RMI_HOST_DEF=-Djava.rmi.server.hostname=10.165.124.6

    在客户端的jmeter.bat中修改配置指定客户端的网卡ip

    增加配置项:set rmi_host=-Djava.rmi.server.hostname=10.165.120.4
    修改配置项:set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %CLASS_UNLOAD% %DDRAW% %rmi_host%
  3. 在修改配置后尝试远程启动,发现还是不成功,打开客户端jmeter.log,发现客户端发送成功;打开服务器端的jmeter-server.log显示服务器连接客户端不成功,尝试ping了一下也确实ping不通,然后网上搜了一下说是因为客户端的防火墙阻止了,关闭客户端所有防火墙,再次执行,测试成功。

依赖文件报错的问题

  1. 当jmeter脚本中需要依赖csv等数据文件时,该文件需上传至服务器,并需要设置正确的路径。

 

 

 

附1:

Linux安装JDK:

0.下载jdk8

登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
选择对应jdk版本下载。(可在Windows下下载完成后,通过文件夹共享到Linux上)
 

1. 登录Linux,切换到root用户

su root 获取root用户权限,当前工作目录不变(需要root密码)

sudo -i 不需要root密码直接切换成root(需要当前用户密码)

2. 在usr目录下建立java安装目录

cd /usr
mkdir java

3.将jdk-8u60-linux-x64.tar.gz拷贝到java目录下

cp /mnt/hgfs/linux/jdk-8u60-linux-x64.tar.gz /usr/java/

4.解压jdk到当前目录

tar -zxvf jdk-8u60-linux-x64.tar.gz
得到文件夹 jdk1.8.0_60

5.安装完毕为他建立一个链接以节省目录长度

(我没用这一步)
ln -s /usr/java/jdk1.8.0_60/ /usr/jdk

6.编辑配置文件,配置环境变量

vim /etc/profile
添加如下内容:JAVA_HOME根据实际目录来
JAVA_HOME=/usr/java/jdk1.8.0_60
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

7.重启机器或执行命令 :source /etc/profile

sudo shutdown -r now
 

8.查看安装情况

java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)

可能出现的错误信息:

bash: ./java: cannot execute binary file

出现这个错误的原因可能是在32位的操作系统上安装了64位的jdk,
查看jdk版本和Linux版本位数是否一致。
查看你安装的Ubuntu是32位还是64位系统:
sudo uname --m
i686 //表示是32位
x86_64 // 表示是64位

 

 

 

附2:

Linux安装jmeter:

1.上传jmeter 的压缩包到Linux

解压文件

unzip  apache-jmeter-3.0,zip

移动文件

mv apache-jmeter-3.0  /data

配置设置

vi /etc/profile

添加

export JMETER_HOME=/data /apache-jmeter-3.0.

export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH

export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin

参考

http://www.cnblogs.com/fengpingfan/p/6028884.html

重新执行刚修改文档

source /etc/profile

修改成功输入

jmeter -–version

更改权限

chmod a+x /data/apache-jmeter-3.0/bin/jmeter

问题2:

报错:Cannot start. Unable to get local host IP address. is a loopback address

在Windows下启动Jmeter非常顺利,转到Linux下居然启动失败。根据抛出的异常的信息来看,这个跟ip有关。 
不出意料,果然是这个问题。 

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 


根据异常的大意可知,应该是hostname与localhost不一致导致的,所以,使用hostname命令查看用户名,果然是不一致的我linux机器的hostname为v3因此将上述改为下面的就可以了。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 
10.2.250.203 v3.rdev.tal.net v3 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 

注意:10.2.250.203 v3.rdev.tal.net v3为你的IP地址(10.2.250.203)加你的hostname(v3.rdev.tal.net)

由/etc/hosts文件导致启动失败的错误有:

1,
Created remote object: UnicastServerRef [liveRef: [endpoint:[10.20.10.31:38796](local),objID:[-b0d822e:12794fee8b1:-7fff, 8314597152635832475]]]
Server failed to start: java.rmi.RemoteException: Cannot start. Unable to get local host IP address.
2,
Created remote object: UnicastServerRef [liveRef: [endpoint:[10.20.10.31:38796](local),objID:[-b0d822e:12794fee8b1:-7fff, 8314597152635832475]]]
Server failed to start: java.rmi.RemoteException: Cannot start. Unable to get local host IP address.

 

 

附3:

Windows下配置jmeter环境变量:

1、设定目录为 D:\apache-jmeter-3.2\

2、新增1个系统变量名JMETER_HOME、变量值输入 D:\apache-jmeter-3.2\

3、新增1个系统变量名CLASSPATH、变量值输入%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar; 

4、在变量path后面加上%JMETER_HOME%\bin

5、配置完成后输入: jmeter和jmeter –v测试一下是否配置正确!

ps:配置环境变量后可以使用相对路径引用参数文件,如:..\datas\CommissionDatas_onlyoneuser.csv

ps:csv文件编码更改:1、首先,将.csv文件保存一下。然后鼠标右击打开方式记事本。2、然后,以记事本的方式打开了。文件-另存为 这时弹出一个窗口,右下方,编码,这时候你就可以选择自己想要的编码格式,然后保存,就是这么简单

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值