在configurationjmeter分布式testing时,我遇到了远程连接到NAT后面的服务器的问题。 jmeter客户端的节点具有外部IP,所有服务器位于NAT之后的不同局域网中,不可能直接进行端口转发。
我决定尝试SSH隧道。
在服务器上:
> jmeter-server -Djava.rmi.server.hostname=127.0.0.1 > ssh -N -f -R 55500:127.0.0.1:55500 -R 55501:127.0.0.1:55501 -L 60000:127.0.0.1:60000 jmuser@client_node_ip -p 5000
在客户端:
> jmeter -n -t testcase.jmx -l testcase.jtl -Djava.rmi.server.hostname=127.0.0.1 -r
less量并发VU(10-100)的情况下,testing成功。 但是,当我指定更多的VU SSH隧道失败,出现以下错误:
accept: Too many open files open failed: administratively prohibited: open failed Write Failed: broken pipe
我看到通过端口60000的许多连接。服务器和客户端节点上的ulimit值相当高= 1000000。
有没有解决办法?
有三件事我会检查:
/proc目录树中的进程的/fd子目录中计算条目。 如果您的应用程序在完成时没有正确closures文件句柄,则可能发生此情况。 ulimit ,你的价值是极高的限制。 通常情况下,它将默认为1024,而65536是非常高的。 如果是通道失败,可能是ssh服务器或ssh客户端失败。 修复ssh服务器的打开文件限制可能比修复ssh客户端打开文件限制更困难。
您可能能够使用多个隧道来解决此限制。 这会让你的脚本稍微难一些,因为你需要将你的连接分散到隧道中。