【JMeter】实现分布式压力测试

【JMeter】实现分布式压力测试,第1张

专业的角度:我们称为分布式负载(压力)测试。

表现形式:就是一台控制器,控制多台负载机器(发生器),向服务器发起请求。

采用这种测试形式的原因:一台计算机难以搞垮服务器。为了真实的模拟高压或者大量请求,更多的计算机和请求数会更好。

JMeter中实现方式,首先配置控制器,还要有多台负载机(被控制的)。

先配置负载机。先远程连接到负载机。配置JMeter的一个代理。

首先编辑JMeter的配置文件。

编辑属性文件中的两项内容,以及获取负载机的IP地址。

修改remote_hosts=127.0.0.1,并且去掉开头行的#

修改server_port=1099,并且去掉开头行的#

在控制器中,生成一个控制器密钥。在控制器的JM的bin目录中,找到下面画框的文件。(本身是一个Windows批处理文件,可以直接运行

在文件中输入相关指示信息。所有地方回复:y;最后可以不输入口令,直接点击回车。

文件运行后,会生成一个密钥文件。

将密钥文件复制到被控计算机的相关目录下。(具体是哪里呢?答:就是被控计算机的JM的bin目录下)

被控计算机启动一个JMeter-Server服务。表明接受被代理。

如果启动成功,则会显示如下:

最后在控制器的JM中,找到配置文件,设置被控计算机的IP地址和端口号。

需要控制多少台计算机,就在remote_hosts后面追加,每一个都用逗号(英文的)隔开即可。

控制器启动JMeter。在run菜单中找remote Start,如果有前面添加的主机,说明配置文件没有问题。

点击被控机器的IP地址。(在被控机上查看服务运行状态)

如果被控机出现如上图所示的内容,(画框的部分),说明代理没有问题,且正在运行。运行结束后,显示Finish。

在控制器上查看运行结果。

注意:此处不是脚本错误。只是因为被控计算机无法联网,导致请求错误。

转化了被控机的IP之后,请求又可以正常发送。

文章来源于:https://blog.csdn.net/russ44/article/details/54729461

Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制。

那么,是如何实现多台负载机同时运行的呢?当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动jmeter。这种方式很笨,也很难达到真正的同步。其实,我们通过单个jmeter 客户端就可以控制多个远程的jmeter服务器,使它们同步的对服务器进行压力测试。

通过远程运行jmeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力,一个jmeter客户端实例,理论上可以控制任意多的远程jmeter实例,并通过他们收集测试数据。这样一样,就有了如下特性:

*  保存测试采样数据到本地机器

*  通过单台机器管理多个jmeter执行引擎。

*  没有必要将测试计划复制到每一台机器,jmeter GUI客户端会将它发往每一台jmeter服务器。

*  每一台jmeter远程服务器都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划。

在1.4G Hz~3GHz 的CPU 、1GB 内存的 JMeter 客户端上,可以处理线程 100~300。但是Web Service 例外。XML处理是 CPU 运算密集的,会迅速消耗掉所有的CPU 。一般来说,以XML技术为核心的应用系统,其性能将是普通Web 应用的 10%~25% 。另外,如果所有负载由一台机器产生,网卡和交换机端口都可能产生瓶颈,所以一个JMeter 客户端线程数不应超过 100 。

采用JMeter 远程模式并不会比独立运行相同数目的非GUI 测试更耗费资源。但是,如果使用大量的JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞。

使用多台机器产生负载的 *** 作步骤如下:

(1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent 。

(2) 运行所有 agent 机器上的jmeter-server 文件(假定使用两台机器192.168.9.99 和192.168.9.130 作为agent)

(3)在controller机器的jmeter的bin目录下,找到jmeter.properties 文件,编辑该文件:

查找:

remote_hosts=127.0.0.1

修改为:

remote_hosts=192.168.9.99:1099,192.168.9.130:1099

这里要特别注意端口后,有些资料说明端口1644为jmeter的controller 和agent 之间进行通信的默认RMI端口号,但是在测试时发现,设置为1644运行不成功,改成1099后运行通过。另外还要留意agent的机子是否开启了防火墙等。

(4)启动controller 机子上的jmeter应用jmeter.bat,选择菜单“运行”--->“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来将所有的agent启动。

遇到的常见问题:

1、在Controller端上控制某台机器Run,提示"Bad call to remote host"。

解决方法:检查被控制机器上的jmeter-server有没有启动,或者JMeter.properties中remote_hosts的配置错误。

2、Agent机器启动Jmeter_server.bat时,后台提示:"could not find ApacheJmeter_core.jar"

解决方法:确定在Agent机器安装jdk,并设置环境变量

3、远程启动时,报错:

ERROR - jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1nested exception is:

java.net.ConnectException: Connection refused: connect

at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)

at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)

at sun.rmi.server.UnicastRef.newCall(Unknown Source)

at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)

at java.rmi.Naming.lookup(Unknown Source)

at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:54)

at org.apache.jmeter.engine.ClientJMeterEngine.(ClientJMeterEngine.java:67)

at org.apache.jmeter.gui.action.RemoteStart.doRemoteInit(RemoteStart.java:180)

at org.apache.jmeter.gui.action.RemoteStart.doAction(RemoteStart.java:80)

at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:81)

这个问题终于被我解决了,其实原因好简单呀。只要将本机的jmter-server.bat执行即可。要是在jmeter.properties配置的地方写了127.0.0.1 的话 就要开本机的 jmeter-sever.bat. 不写的话 就不用开了

4、查看1099端口是否被占用

netstat -ano | findstr "1099"

tasklist | findstr "1099"

其它说明:

1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。

2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11581178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存