3

我在分布式异步模式下使用 Infinispan,在 4 个不同的系统上有 4 个节点。每个节点运行 3 GB 的堆大小。

只有一个节点扮演加载器的角色,并尝试以块的形式加载 5000 万条记录(在循环中,500 万条记录被缓存 10 次)。根据我的计算,4 个节点可以处理这么多数据,所以空间不是问题。

当我启动所有 4 个节点时,集群成功形成并且数据开始加载到缓存中。但是由于数据非常庞大,有时任何一个节点都无法从另一个节点获得响应,并且失败并出现以下异常:

2013-11-01 05:35:14 ERROR org.infinispan.interceptors.InvocationContextInterceptor     - ISPN000136: Execution error
org.infinispan.util.concurrent.TimeoutException: Timed out after 15 seconds waiting for a response from INUMUU410-54463
 at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.processCalls(CommandAwareRpcDispatcher.java:459)
 at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.invokeRemoteCommands(CommandAwareRpcDispatcher.java:154)
 at org.infinispan.remoting.transport.jgroups.JGroupsTransport.invokeRemotely(JGroupsTransport.java:534)

INUMUU410-54463 是机器名称。

4

1 回答 1

1

(从上面的Flavius评论复制:)

在您的情况下,我要做的是将其拆分为一个 putAll 不包含超过例如 1MB 的数据,然后同步发送这些数据(使用 cache.getAdvancedCache().withFlags(FORCE_SYNCHRONOUS))。或者以其他方式限制同时播出的消息数量(另请参阅高级缓存上的 putAllAsync 方法)。

于 2014-01-02T15:39:13.457 回答