我正在使用Java和RMI为了在数百个内核的集群上执行100k Montecarlo仿真。HPC应用程序中的Java RMI随机延迟
我正在使用的方法是有一个客户端应用程序调用RMI进程并在网格上的可用(RMI)进程数量上划分仿真。
一旦模拟运行,我必须重新聚集结果。
我唯一的限制就是所有这些都必须在不到500ms的时间内完成。
该过程实际上已经到位但是随机地,不时地,其中一个RMI调用需要200ms多执行。
我添加日志和定时加载所有的地方和可能的原因我已经放弃:
1)模拟采取额外的时间 2)数据传输(它不断地工作,只是有时减速被验证,并且只在RMI呼叫的一个子集上) 3)将结果传回(我可以清楚地计时从最后的RMI呼叫返回到过程结束的时间)
我唯一不能测量的是IF任何RMI呼叫都会花费额外的时间进行初始化(并且老实说我是唯一可以设想的)。这样做的原因是,-unfortunately-时钟不同步:(
这是可能的RMI远程进程得到了钝化/分离/收集即使我保持一个(远程)引用它从客户端?
希望这个问题是非常明显的(我非常肯定这是不是)。
感谢密尔,不要犹豫,使更多的问题,如果它不够明确。
问候, Giovanni
嗨, 感谢您的答复。 寻呼的东西是让我害怕的东西。 无论如何,我并没有使用回调函数,实际上我也不知道“排除GC函数”的含义。我有JVM来打印GC活动。 它的工作方式是创建多个线程,并且每个线程都处理RMI调用。线程和对RMI进程的引用在启动时脱机初始化,并且引用保存在客户机进程中,以使热服务准备好运行。 在这种情况下,回调方法是否有用?无论如何,我会放弃它。 干杯, 吉奥 –
一个更多的信息在这里。基本上,如果我针对一个RMI进程运行1个线程,它总是可以正常工作。一旦我使用更多的RMI进程(这意味着更多的线程**和套接字**),延迟开始出现。如果我打电话给我的本地env(线程和RMI进程在同一硬件上,根本没有延迟,Socket是我的下一个调查区域,是否有线索? –
如果打印出GC活动,是否看到任何关联在GC启动和高延迟调用之间?如果不是,你排除了GC(这就是我的意思)。回调方法的唯一原因是安全地忽略高延迟请求,而不是修复它们。您仍然可以在您所需的时间范围内得到答案,因为您的聚合器可以全天候工作,不会因为这种延迟造成的任何后果而引发争论。因为您将应用程序描述为蒙特卡罗模拟器,所以我提供的是一种可能性(与分支定界相比,正确性要求全部完成) – ccoakley