我正在使用Hazelcast版本3.3(开源),并面临分布式地图吞吐量不一致的问题。
我有一个缓存实例,一端是应用程序将数据放入缓存(每1分钟以1000个对象的速率),另一端是另一个应用程序从地图获取数据(速率为100)每一秒)。 Java对象使用默认的Java序列化和内存格式作为BINARY。
对于大多数“获取”操作,数据提取工作正常,只需不到1毫秒,但有时“获取”操作需要长达20毫秒才能获取相同的数据。这种极端行为是不可接受的,因为我无法延迟处理,因为随机提取花费的时间比预期的要长。
我正在寻找在获取数据时可预测/一致的吞吐量;从Hazelcast实例获取数据的随机峰值是不可接受的。 如果有人遇到同样的问题并且有指针请分享。
答案 0 :(得分:1)
-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热身时间。我在启动时几次访问完整的地图,然后才能在应用程序中使用。
通过这些变化,我可以看到性能的良好改善。