2015-02-17 90 views
2

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

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

Every在一段时间一次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 = 172.31.44.2]:5701,backupsExpected = 0,backupsCompleted = 0},response = null,done = false}没有收到响应!备份 - 预期:0备份 - 完成:0

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

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

对我的使用案例的任何反馈将不胜感激。

+1

此处有任何新信息?我也有同样的问题。 – heaphach 2015-09-18 08:51:20

+0

为了解我们由于处理远程请求的节点上的高延迟而导致的问题。 我们做了两件事来解决问题: 1。摆脱了Hazelcast地图并使用本地地图来减少序列化延迟(实现我们自己的持久性)。 2.使用Hazelcast API实现非阻塞的“executeOnKeyOwner”操作。 – ybensimhon 2015-09-20 10:37:22

+0

我也面临类似的情况,这可能与https://github.com/hazelcast/hazelcast/issues/2051有关 – 2015-09-20 11:22:40

回答

0

为什么不使用输入处理器?这也发送到拥有分区和负载的正确机器,修改,存储自动完成并自动完成。所以没有种族问题。由于所涉及的远程处理较少,它可能会大大超过目前的处理方法。

map.get没有返回120秒的事实的确令人困惑。如果您切换到Hazelcast 3.5,我们会使用慢速操作检测器(执行端)和慢速调用检测器(来电端)为此添加一些日志记录/调试内容,并且应该为您提供一些见解。

您是否看到任何运行状况监视器日志正在打印?