Java 性能下降,从Hazelcast 2.5升级到3+;

Java 性能下降,从Hazelcast 2.5升级到3+;,java,java-io,hazelcast,appdynamics,Java,Java Io,Hazelcast,Appdynamics,由于Hazelcast 2.5中的一个已知(已修复)缺陷,我们决定将其作为我们项目的下一个升级候选。但在加入最新版本(3.2.2)后,我们的性能非常糟糕 我们使用Hazelcast的方式: 两节点 多个IMap实例(总共约7个贴图) 两个节点都会更新地图 在地图上读了很多书 启用近缓存以加快读取速度 使用Hazelcast 2.5,我们获得了很好的性能,我们没有使用map.values(),而是提供了一个包含所有键的列表map.getAll(containedKeys)。通过将EntryLi

由于Hazelcast 2.5中的一个已知(已修复)缺陷,我们决定将其作为我们项目的下一个升级候选。但在加入最新版本(3.2.2)后,我们的性能非常糟糕

我们使用Hazelcast的方式:

  • 两节点
  • 多个IMap实例(总共约7个贴图)
  • 两个节点都会更新地图
  • 在地图上读了很多书
  • 启用近缓存以加快读取速度
使用Hazelcast 2.5,我们获得了很好的性能,我们没有使用
map.values()
,而是提供了一个包含所有键的列表
map.getAll(containedKeys)
。通过将
EntryListener
添加到将containedKeys存储在并发集中的映射,我们可以跟踪containedKeys。这是一位同事添加的,感觉像是一个黑客,但工作起来像一个符咒

现在,当我们升级到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(并将条目重新命名为MapEntry),没有任何问题


这可能是什么原因造成的?也许它不再使用近缓存了?

你有没有看一下谷歌团体票的问题

这里特别关注问题的原因


是否有机会快速构建自己的快照并进行尝试?我知道有一个nearcache错误,但不确定它是否适用于这种情况。我已经修补了这个问题:它修复了loadClass,但这个readObject现在是瓶颈。请给我指出一个可能的补丁/方向。Java标准序列化永远是瓶颈。如果你想要高速,就不要使用它,或者至少使用j.i.Externalizable。@RoyvanRijn:Hazelcast的代码库仍在经历惊人的代码搅动。我们已经看到了从一个小版本到另一个版本的性能的剧烈波动。我的建议是坚持使用最适合您的特定版本,并尝试在该版本的一个点版本中修复您的错误。您正在使用Java Serializable。我看到了一些问题;为了快速检查,您可以切换到不同的序列化程序,看看这是否会提高性能。