Java Hazelcast IMap#获得周期性极端延迟

Java Hazelcast IMap#获得周期性极端延迟,java,hazelcast,hazelcast-imap,Java,Hazelcast,Hazelcast Imap,在特定Hazelcast映射上执行IMap.get()时,我们遇到了非常不一致的性能 我们的Hazelcast集群运行3.8版,有8个成员,我们作为Hazelcast客户端连接到集群。我们遇到问题的地图的备份计数为1 我们已将慢速操作隔离为单个IMap。通过在该行代码的两侧进行日志记录来获取操作。get通常需要几毫秒的时间,但是对于一些键,它需要30到50秒。我们可以在同一张地图上执行许多get操作,它们都会快速返回,除了相同的几个键。特定的映射相对较小,只有大约2000个条目,类型为 如果我们

在特定Hazelcast映射上执行
IMap.get()
时,我们遇到了非常不一致的性能

我们的Hazelcast集群运行3.8版,有8个成员,我们作为Hazelcast客户端连接到集群。我们遇到问题的地图的备份计数为1

我们已将慢速操作隔离为单个
IMap。通过在该行代码的两侧进行日志记录来获取
操作。
get
通常需要几毫秒的时间,但是对于一些键,它需要30到50秒。我们可以在同一张地图上执行许多
get
操作,它们都会快速返回,除了相同的几个键。特定的映射相对较小,只有大约2000个条目,类型为

如果我们重新启动集群中的一个成员,我们仍然会经历相同的延迟,但密钥不同。这似乎表明当我们停止/启动一个成员时,集群重新平衡时,某个特定成员出现了问题。我们已经尝试单独停止每个成员并进行测试,但在单独停止每个成员时会遇到相同的症状。我们还尝试减少和增加集群中的成员数量,但不管怎样都会出现相同的症状

我们已经通过线程转储确认了通用操作线程没有被阻塞,并且已经尝试增加操作线程的数量以及启用并行化,但是没有看到行为上的变化。我们还在集群中启用了诊断日志记录,没有发现任何明显的问题(没有报告任何缓慢的操作)

查看Hazelcast JMX MBeans,特定映射上的maxGetLatency仅为1秒左右,远低于我们实际经历的时间。这似乎表明客户端连接或底层网络存在问题。然而,慢键的数量仅占总键数的1%,因此,除非我们失去平衡,否则问题似乎不会再次出现在单个成员身上,因为您预计大约有八分之一的键慢。我们还从Hazelcast日志中确认集群是稳定的。成员不会退出或重新加入

有趣的是,如果我们停止并重新启动整个集群,我们最初会获得良好的性能,但几分钟后,它会退化回相同的状态,而一些特定的
IMap.get
操作需要30秒以上的时间

这段代码并不新鲜,已经运行了很长一段时间了。然而,一旦这种行为开始,它在这里就一直是可复制的。据我们所知,没有环境变化

我们是否可以启用任何诊断日志来了解Hazelcast客户端?是否有其他诊断选项可用于跟踪延迟的来源?不幸的是,我们无法在任何其他环境中重现这一点,而这些环境似乎指向某个环境或该环境中集群特有的东西

另一个潜在的有趣的事情是,我们在每个集群成员中每隔6秒看到以下日志语句。“备份超时:1”令人担忧,但我们不确定它的含义

INFO:[IP]:[PORT][CLUSTER_NAME][3.8]调用:1超时:0备份超时:1


如果您有任何关于如何进一步调试的想法或建议,我们将不胜感激。

您能否确认服务器盒中没有运行其他应用程序?另外,您是在虚拟机上运行集群还是在裸机上运行集群?您可以使用以下属性在客户端上启用诊断:
-Dhazelcast.diagnostics.enabled=true
-Dhazelcast.diagnostics.metric.level=info
群集正在虚拟机上运行,没有任何其他应用程序在那里运行。VMs和JVM进程在所有基本指标(如内存和CPU使用率)的正常范围内运行。请检查VMs上是否启用了vMotion()?如果是,您可以禁用它并重试吗?另外,如果你有GC日志,你能分享一下吗?@NOLT232,你有没有试过阿尔帕斯兰建议禁用VMotion?