nul*_*ull 32 jmeter amazon-web-services
我必须使用JMeter进行分布式测试.目标是让AWS中的多个远程服务器由一个本地服务器控制,将文件下载请求发送到AWS中的另一个服务器.
如何在AWS中设置不同的服务器?
如何远程连接它们?
有人可以提供一些有关如何操作的分步说明吗?
我已经尝试了几件事,但是不断遇到跨网络的连接问题.
Arc*_*wal 58
我们有类似的任务,我们遇到了一堆问题.以下是整个过程的详细信息以及我们为解决遇到的问题所做的工作.希望能帮助到你.
我们需要从位于世界各地的5台服务器发送请求.因此,我们在AWS中启动了5个微实例,每个实例位于不同的区域.我们选择区域尽可能地在地理上分开.
以下是我们如何设置每个实例.
安装java:
$ sudo apt-get update
$ sudo apt-get install default-jre
Run Code Online (Sandbox Code Playgroud)已安装的JMeter:
$ mkdir jmeter
$ cd jmeter;
$ wget ftp://apache.mirrors.pair.com//jmeter/binaries/apache-jmeter-2.9.tgz
$ gunzip apache-jmeter-2.9.tgz;tar xvf apache-jmeter-2.9.tar
Run Code Online (Sandbox Code Playgroud)编辑JMeter安装文件夹jmeter.properties中的/bin文件,并取消注释包含该server.rmi.localport设置的行.我们将端口更改为50000.
server.rmi.localport=50000
Run Code Online (Sandbox Code Playgroud)启动JMeter服务器.确保服务器报告的地址和端口正确无误.
$ cd ~/jmeter/apache-jmeter-2.9/bin
$ vi jmeter-server
Run Code Online (Sandbox Code Playgroud)然后我们设置JMeter在本地客户机上对这些实例远程运行测试:
jmeter.properties可bin在JMeter安装文件夹中找到的文件启用远程测试.remote_hosts需要使用我们连接的远程服务器的公共DNS设置该参数.remote_hosts=54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x我们现在能够告诉我们的客户端JMeter实例在任何或所有指定的远程服务器上运行测试.
以下是我们遇到的问题以及我们如何解决它们:
客户失败了:
错误 - jmeter.engine.ClientJMeterEngine:java.rmi.ConnectException:Connection - 拒绝主机:127.0.0.1
这是由于服务器主机因为Amazon NAT而将私有IP地址作为其地址返回.我们通过设置脚本在启动服务器时包含的参数RMI_HOST_DEF来修复此问题/usr/local/jmeter/bin/jmeter-server:
RMI_HOST_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx
Run Code Online (Sandbox Code Playgroud)
现在,AWS实例返回了服务器的外部IP,我们就可以开始测试了.
当服务器节点尝试返回结果并尝试连接到客户端时,服务器尝试连接到本地计算机的外部IP地址.但它抛出连接拒绝错误:
2013/05/16 12:23:37错误 - jmeter.samplers.RemoteListenerWrapper:testStarted(host)java.rmi.ConnectException:连接拒绝主机:xxx.xxx.xxx.xx;
我们通过在客户端设置反向隧道解决了这个问题.
首先,我们在JMeter安装jmeter.properties的/bin文件夹中编辑该文件,并取消注释包含该client.rmi.localport设置的行.我们将端口更改为60000:
client.rmi.localport=60000
Run Code Online (Sandbox Code Playgroud)然后我们使用SSH连接到每个服务器,并在客户端上设置反向隧道到端口60000.
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -R 60000:localhost:60000 ubuntu@54.x.x.x
Run Code Online (Sandbox Code Playgroud)我们保持每个会话都打开,因为JMeter服务器需要能够将测试结果传递给客户端.
然后我们JVM_ARGS在客户端上设置环境变量,在jmeter.sh文件/bin夹中的文件中:
export JVM_ARGS="-Djava.rmi.server.hostname=localhost"
Run Code Online (Sandbox Code Playgroud)通过这样做,JMeter将告诉服务器连接以localhost:60000提供结果.这最终会被隧道传回客户端.
在闲置一点之后,与服务器的SSH连接不断下降.为了防止这种情况发生,我们在每个SSH隧道设置中添加了一个参数,指示客户端等待60秒,然后将空数据包发送到服务器以保持连接处于活动状态:
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -o ServerAliveInterval=60 -R 60000:localhost:60000 ubuntu@54.x.x.x
Run Code Online (Sandbox Code Playgroud)(.ssh/config所有必需的SSH设置的版本:
Host 54.x.x.x
HostName 54.x.x.x
Port 22
User ubuntu
ServerAliveInterval 60
RemoteForward 127.0.0.1:60000 127.0.0.1:60000
IdentityFile ~/.ssh/54-x-x-x.us-east.pem
IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)
只需ssh 54.x.x.x在设置之后使用.)
我刚刚在openstack上找到了这个并发现了同样的问题......不知道为什么jmeter远程处理文档只涵盖了所需步骤的一半.您可以在没有隧道或触摸属性文件的情况下执行此操作.
你需要
如果您使用工作站作为客户端,您可能仍需要隧道.Archana Aggarwal上面有隧道的好建议.
设置java.rmi.server.hostname和server.rmi.localport内联或在属性文件中.
jmeter-server -Djava.rmi.server.hostname=publicip -Dserver.rmi.localport=4000
Run Code Online (Sandbox Code Playgroud)
您也可以在与客户端相同的计算机上运行一个.为了清楚起见,我已经设置java.rmi.server.hostname但保持server.rmi.localport动态
jmeter-server -Djava.rmi.server.hostname=localip
Run Code Online (Sandbox Code Playgroud)
设置java.rmi.server.hostname和client.rmi.localport内联或在属性文件中.-R像这样使用等:
jmeter -n -t Test.jmx -Rremotepublicip1,remotepublicip2 -Djava.rmi.server.hostname=clientpublicip -Dclient.rmi.localport=4001 -GmypropA=1 -GmypropB=2 -lresults.jtl
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21623 次 |
| 最近记录: |