通过SSL的RMI - 缓慢的通信

时间:2014-10-14 19:39:20

标签: java performance ssl virtual-machine rmi

我在计算机上的两台虚拟机之间创建了一个测试程序。所以我在VMware上的虚拟机上运行了RMI服务器,并且我在VMware上的另一个虚拟机上运行了RMI客户端。

我使用SslRMIServerSocketFactorySslRMIClientSocketFactory设置了SSL,并且可以从客户端调用方法到服务器,让服务器响应返回值。所以现在我在VMware上运行了两台Ubuntu机器。

当客户端调用服务器时,我必须等待大约17秒,直到服务器的响应到达客户端并且在控制台上执行打印。 已更新:该方法的通话速度很快。所有这些时间都由Registry.lookup()函数执行。

阿伦17秒太多时间了? 我知道虚拟机本质上是缓慢的,加上SSL正在运行,但仍然不是17秒,我正在做什么?远程方法只添加两个整数并返回结果。

谢谢。

2 个答案:

答案 0 :(得分:1)

出于安全考虑,Java会在连接或接受套接字时反向DNS。您没有关于客户端上可用服务器的任何DNS或反向DNS信息,也没有关于服务器上可用客户端的任何DNS或反向DNS信息。将服务器条目放入客户端的/etc/hosts文件,并将客户端条目放入服务器的/etc/hosts文件中。否则,它会尝试通过DNS服务器和超时等待响应,然后继续。

答案 1 :(得分:0)

我在将RMI客户端连接到同一台计算机上的RMI服务器时遇到了同样的问题。 在我的情况下,甚至在服务器中实例化继承自 UnicastRemoteObject 的对象也会导致延迟超过20秒。使用localhost配置/ etc / hosts并没有解决问题,我必须在使用RMI之前在我的java应用程序中使用这一行:

System.setProperty("java.rmi.server.hostname", "127.0.0.1");