2014-09-22 54 views
1

我正在使用Hazelcast版本3.3(开放源代码)并面临分布式映射的吞吐量不一致的问题。Hazelcast - 分布式映射的吞吐量不一致

我有一个单一的缓存实例,一端有一个应用程序将数据放入缓存中(每隔1分钟以1000个对象的速度),另一端则从另一端获取地图中的数据(速度很慢每秒100个)。 Java对象使用默认的Java序列化和内存中格式作为BINARY。

对于大多数“获取”操作而言,数据的获取工作正常,但操作时间少于1毫秒,但有时“获取”操作最多需要20毫秒才能获取相同的数据。这种极端行为是不可接受的,因为我无法延迟处理,因为随机获取花费的时间比预期的要长。

我正在寻找前进的可取/一致的吞吐量取数据;从Hazelcast实例中获取数据的随机高峰是不可接受的。 如果有人遇到同样的问题,并有指针请分享。

回答

1

我已经对该项目进行了2次更改。

月1日我从变化的java.io.Serializable系列化com.hazelcast.nio.serialization.DataSerializable 第二我已经介绍了Java预热时间。在开始使用之前,我正在访问完整的地图几次,然后在应用程序中实际使用。

有了这些变化,我可以看到在性能方面有了很大的提高。

1

你有GC日志吗?这很可能是由垃圾收集器引入的暂停造成的。在热点(太阳/ Oracle的Java的),可以通过这些标记启动JVM启用日志:

-Xloggc:/path/to/file/gc.log -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails 

它会产生与GC事件日志,这样你就可以尝试用GC暂停相关联的异常高的延迟。

如果您也可以尝试使用这个SWICH:

-XX:+PrintGCApplicationStoppedTime 

它将报告所有JVM暂停,不只是垃圾收集触发暂停。