Hazelcast - 分布式映射的吞吐量不一致
问题描述:
我正在使用Hazelcast版本3.3(开放源代码)并面临分布式映射的吞吐量不一致的问题。Hazelcast - 分布式映射的吞吐量不一致
我有一个单一的缓存实例,一端有一个应用程序将数据放入缓存中(每隔1分钟以1000个对象的速度),另一端则从另一端获取地图中的数据(速度很慢每秒100个)。 Java对象使用默认的Java序列化和内存中格式作为BINARY。
对于大多数“获取”操作而言,数据的获取工作正常,但操作时间少于1毫秒,但有时“获取”操作最多需要20毫秒才能获取相同的数据。这种极端行为是不可接受的,因为我无法延迟处理,因为随机获取花费的时间比预期的要长。
我正在寻找前进的可取/一致的吞吐量取数据;从Hazelcast实例中获取数据的随机高峰是不可接受的。 如果有人遇到同样的问题,并有指针请分享。
答
我已经对该项目进行了2次更改。
月1日我从变化的java.io.Serializable系列化com.hazelcast.nio.serialization.DataSerializable 第二我已经介绍了Java预热时间。在开始使用之前,我正在访问完整的地图几次,然后在应用程序中实际使用。
有了这些变化,我可以看到在性能方面有了很大的提高。
答
你有GC日志吗?这很可能是由垃圾收集器引入的暂停造成的。在热点(太阳/ Oracle的Java的),可以通过这些标记启动JVM启用日志:
-Xloggc:/path/to/file/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails
它会产生与GC事件日志,这样你就可以尝试用GC暂停相关联的异常高的延迟。
如果您也可以尝试使用这个SWICH:
-XX:+PrintGCApplicationStoppedTime
它将报告所有JVM暂停,不只是垃圾收集触发暂停。