通过 ssh 隧道进行 Jmeter 分布式测试

通过 ssh 隧道进行 Jmeter 分布式测试

在配置 jmeter 分布式测试时,我遇到了远程连接到 NAT 后面的服务器的问题。带有 jmeter 客户端的节点具有外部 IP,所有服务器都位于 NAT 后面的不同 LAN 中,无法直接进行端口转发。

我决定尝试 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

在并发 VU 数量较少的情况下(10-100),测试成功。但是当我指定更多 VU 时,SSH 隧道失败并出现以下错误:

accept: Too many open files
open failed: administratively prohibited: open failed
Write Failed: broken pipe

我看到端口 60000 上有许多连接。服务器和客户端节点上的 ulimit 值相当高 = 1000000。

有什么解决方法吗?

答案1

我要检查三件事:

  • 监控应用程序在测试期间打开的文件数。有多种方法可以做到这一点,但我只计算目录树/fd中进程子目录中的条目/proc。如果您的应用程序在完成后没有正确关闭文件句柄,则可能会发生这种情况。
  • 检查ulimit打开的文件,您拥有的值对于该限制来说非常高。通常,它的默认值约为 1024,而 65536 非常高。
  • 监视端口 60000 上已建立的连接数。这些连接将计入打开文件限制。

如果隧道出现故障,则可能是 ssh 服务器或 ssh 客户端出现故障。修复 ssh 服务器的打开文件限制可能比修复 ssh 客户端的打开文件限制更困难。

您可以使用多个隧道来解决此限制。这将使您的 jmeter 脚本稍微困难一些,因为您需要跨隧道分散连接。

相关内容