2014-06-17 52 views
7

由於Hazelcast 2.5中的已知(固定)錯誤,我們決定這將成爲我們項目的下一個升級候選者。但是在下載最新版本(3.2.2)之後,我們表現糟糕。從Hazelcast 2.5的性能降低升級到3+

我們使用Hazelcast方式:

  • 兩個節點
  • 多個IMAP實例(總共約7地圖)
  • 兩個節點更新地圖
  • 很多在地圖上讀
  • 啓用near-cache加速讀取

使用Hazelcast 2.5時,我們有很好的表現,而不是使用map.values(),我們提供了所有包含的密鑰列表map.getAll(containedKeys)。我們通過將EntryListener添加到將所包含的鍵存儲在併發集中的映射來跟蹤包含的鍵的方式。這是由一位同事添加的,感覺像一個黑客,但像一個魅力。現在

,當我們升級到3.2.2 Hazelcast我們立即看到問題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)並沒有什麼錯誤。

這可能是什麼原因造成的?也許它不再使用near-cache了?

+0

是否有機會快速構建自己的快照並嘗試使用?我知道有一個nearcache錯誤,但不知道它是否適用於這種情況。 – noctarius

+0

我已經修補了這個:https://github.com/hazelcast/hazelcast/pull/2523它修復了loadClass,但是這個readObject現在是瓶頸。請指點我可能的補丁/方向。 –

+1

那麼Java標準序列化將永遠是瓶頸。如果你想要高速,就不要使用它,或者至少使用j.i.Externalizable。 – noctarius

回答