【发布时间】:2014-10-14 19:39:19
【问题描述】:
我在我的计算机上的两个虚拟机之间创建了一个测试程序。因此,我在 VMware 上的虚拟机上运行了一个 RMI 服务器,并且我在 VMware 上的另一个虚拟机上运行了一个 RMI 客户端。
我已经使用SslRMIServerSocketFactory 和SslRMIClientSocketFactory 设置了SSL,并且可以从客户端调用方法到服务器,让服务器响应返回值。所以现在我有两台在 VMware 上运行的 Ubuntu 机器。
发生的情况是客户端调用服务器,我必须等待大约 17 秒,直到服务器的响应到达客户端并在控制台上执行打印。 更新:该方法的调用速度很快。所有这些时间都由Registry.lookup() 函数占用。
17 秒的时间是不是太长了? 我知道虚拟机本质上很慢,再加上 SSL 正在运行的事实,但对于我正在做的事情来说,17 秒不是太多了吗?远程方法只是将两个整数相加并返回结果。
谢谢。
【问题讨论】:
-
这不是您的问题的答案,而是更多的调试步骤。您是否尝试过在 ssl 之外进行计算?从历史上看,RMI 一直很慢,这也是人们转向更轻量级传输方法(如 json)的原因之一。现在,我不知道 RMI 是否在过去 15 年中加速了,但我没有听到“哦,json?”的喋喋不休。太慢了,我们搬到 RMI...'
-
没有 SSL 的 RMI 工作正常。只需几毫秒即可获得远程调用方法的返回值。这就是为什么我要问 SSL 的引入是否会导致所有这些延迟是否正常。
-
所以,我对你的问题做了一些 google-fu。请检查这个答案,看看它是否对您有帮助:stackoverflow.com/questions/11343132/rmi-responding-very-slow 您还可以打开 java 的 ssl 调试选项,看看那里是否有明显的东西。要打开 ssl 调试,请将 -Djavax.net.debug=ssl 添加到您的应用程序 vm 选项中。
-
我在问这个问题之前看到了那个答案。我已经在服务器上定义了主机名属性。我已经把服务器的IP地址。事实证明,一直以来都是
Registry.lookup()调用……远程方法调用很快。虽然减速只发生在开始时,但我想知道这是否正常。如果不是,如何避免这种情况。 -
OK 现在你可以检查服务器的
/etc/hosts文件是否有客户端IP 的条目。如果没有,放一个?
标签: java performance ssl virtual-machine rmi