Hazelcast - 分布式地图的吞吐量不一致

时间:2014-09-22 09:36:04

标签: hazelcast

我正在使用Hazelcast版本3.3(开源),并面临分布式地图吞吐量不一致的问题。

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

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

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

2 个答案:

答案 0 :(得分:1)

你有GC日志吗?它很可能是由垃圾收集器引入的暂停引起的。在HotSpot(Sun / Oracle Java)上,可以通过使用以下标志启动JVM来启用日志:

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

它将生成包含GC事件的日志,因此您可以尝试将异常高的延迟与GC暂停相关联。

如果您也可以尝试使用此swich:

-XX:+PrintGCApplicationStoppedTime 

它将报告所有JVM暂停,而不仅仅是垃圾收集器触发的暂停。

答案 1 :(得分:1)

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

我已经将序列化从java.io.Serializable更改为com.hazelcast.nio.serialization.DataSerializable 第二我介绍了java热身时间。我在启动时几次访问完整的地图,然后才能在应用程序中使用。

通过这些变化,我可以看到性能的良好改善。