性能从Hazelcast 2.5升级到3+

时间:2014-06-17 10:11:19

标签: java java-io hazelcast appdynamics

由于Hazelcast 2.5中已知(固定)的错误,我们已经确定这将是我们项目的下一个升级候选者。但是在放入最新版本(3.2.2)后,我们的表现非常糟糕。

我们使用Hazelcast的方式:

  • 两个节点
  • 多个IMap实例(总共约7张地图)
  • 两个节点都会更新地图
  • 地图上有很多内容
  • 启用近缓存以加快读取速度

使用Hazelcast 2.5时,我们提供了包含所有包含的密钥map.values()的列表,而不是map.getAll(containedKeys),而是使用了Hazelcast 2.5。我们通过向映射添加EntryListener来跟踪包含的密钥的方式,该映射将包含的密钥存储在并发集中。这是由同事添加的,感觉就像一个黑客,但就像一个魅力。

现在,当我们升级到Hazelcast 3.2.2时,我们会立即看到java.io的问题,例如,请查看AppDynamics的以下代码段:

com.hazelcast.map.proxy.MapProxyImpl:getAll:326 (method time = 0 ms, total time = 18938 ms)
 com.hazelcast.map.proxy.MapProxySupport:getAllObjectInternal:495 (method time = 0 ms, total time = 18938 ms)
  com.hazelcast.map.MapService:toObject:852 (method time = 0 ms, total time = 18938 ms)
   com.hazelcast.spi.impl.NodeEngineImpl:toObject:156 (method time = 0 ms, total time = 18938 ms)
    com.hazelcast.nio.serialization.SerializationServiceImpl:toObject:221 (method time = 0 ms, total time = 18938 ms)
     com.hazelcast.nio.serialization.StreamSerializerAdapter:read:59 (method time = 0 ms, total time = 18938 ms)
      com.hazelcast.nio.serialization.DefaultSerializers$ObjectSerializer:read:185 (method time = 0 ms, total time = 18938 ms)
       java.io.ObjectInputStream:readObject:370 (method time = 3398 ms, total time = 18938 ms)
        java.io.ObjectInputStream:readObject:370 (method time = 15540 ms, total time = 15540 ms)

这是我们在Hazelcast 2.5中看不到的,但在3.2.2中也有。它使我们的应用程序彻底停顿。再次用2.5替换jar(并将Entry重命名为MapEntry)并没有错。

可能导致这种情况的原因是什么?也许它不再使用近缓存了?

1 个答案:

答案 0 :(得分:0)

您是否看过这个谷歌团体票证问题?

https://groups.google.com/forum/#!topic/hazelcast/ivk6hzk2YwA

这里特别说明了问题的原因。

https://github.com/hazelcast/hazelcast/issues/553