Hazelcast - OperationTimeoutException

时间:2015-02-17 20:32:39

标签: hazelcast distributed-cache

我正在使用Hazelcast版本3.3.1 我使用c3.2xlarge服务器在aws上运行了一个9节点集群 我正在使用分布式执行程序服务和分布式映射 分布式执行程序服务使用单个线程。 分布式映射配置为无复制且没有近缓存,并使用Kryo序列化程序存储大约1-2万个大小为1-2kb的对象。
我的用例如下:

  • 所有9个节点不断对分布式执行器服务执行同步远程操作,每秒产生大约20k次点击(每个节点约2k)。
  • 使用Hazelcast API执行调用:com.hazelcast.core.IExecutorService#executeOnKeyOwner。
  • 每个操作访问拥有分区的节点上的分布式映射,使用存储的对象进行一些计算并将对象存储到映射中。 (为此我使用IMap对象的get和set API。)

每隔一段时间Hazelcast就会遇到超时异常,例如:
com.hazelcast.core.OperationTimeoutException:无响应120000毫秒。中止调用! BasicInvocationFuture {invocation = BasicInvocation {serviceName =' hz:impl:mapService',op = GetOperation {},partitionId = 212,replicaIndex = 0,tryCount = 250,tryPauseMillis = 500,invokeCount = 1,callTimeout = 60000 ,target = Address [172.31.44.2]:5701,backupsExpected = 0,backupsCompleted = 0},response = null,done = false}未收到任何响应! backup-expected:0 backup-completed:0

在某些情况下,我看到地图分区开始迁移,这使事情变得更糟,节点不断离开并重新加入群集,我可以解决问题的唯一方法是重新启动整个群集。

我想知道什么可能导致Hazelcast阻止地图获取操作120秒? 我很确定它不是网络相关的,因为同一台服务器上的其他服务运行得很好。 另请注意,服务器大多处于空闲状态(约70%)。

对我的用例的任何反馈都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

为什么不使用入门处理器?这也发送到拥有分区的右侧机器,负载,修改,存储自动完成并自动完成。所以没有种族问题。由于涉及的远程处理较少,它可能会显着优于当前的方法。

map.get没有返回120秒的事实确实非常令人困惑。如果您切换到Hazelcast 3.5,我们使用慢速操作检测器(执行侧)和慢速调用检测器(调用方)为此添加了一些日志/调试内容,并且应该为您提供一些有关正在发生的事情的信息。

您是否看到正在打印健康监视器日志?