4

我有一个 Windows 服务应用程序和一个使用 RMI 与服务通信的客户端。我需要对多个客户端进行一些并发测试,但我需要每个客户端运行到不同的 jvm 实例,因为它的代码中有一些静态变量。我可以这样做吗?有任何想法吗?

4

2 回答 2

5

是的,您可以使用 JDI 执行此操作 - VirtualMachineManager(您可以通过调用获得Bootstrap.virtualMachineManager();)提供(至少一个)启动连接器。然后,您可以调用launch();此连接器,它为您创建的 VM 提供VM 镜像。然后,此镜像允许您在此 VM 上远程执行方法。

您可以使用此方法设置任意数量的远程虚拟机,但显然以这种方式执行操作会带来相对较大的性能损失,而且需要付出相当大的努力。除非付出巨大的努力,否则我个人主张修复代码以保证线程安全(使用ThreadLocal),然后您就无需担心 JDI(或类似设置)。

于 2013-05-23T14:00:07.920 回答
2

您可以使用 shell 脚本在循环中生成具有自己的一组参数的新客户端。

但是,总的来说。仅仅因为共享一些静态变量而在多个 VM 中运行客户端代码绝对不是一个好的解决方案。根本问题在于您的客户端代码,正如已经建议的那样,您可以使用ThreadLocal,ThreadPools或一些同步逻辑来隔离各种客户端线程之间的一组变量。

于 2013-05-23T21:53:03.143 回答