Hazelcast 2.5 の既知の (修正された) バグのため、これがプロジェクトの次のアップグレード候補になると判断しました。しかし、最新バージョン (3.2.2) を導入した後、パフォーマンスが大幅に低下しました。
Hazelcast の使用方法:
- 2 つのノード
- 複数の IMap インスタンス (合計で約 7 つのマップ)
- 両方のノードがマップを更新します
- 地図でたくさん読む
- 読み取りを高速化するために有効化されたニアキャッシュ
Hazelcast 2.5 を使用するとmap.values()
、 を使用する代わりに、含まれているすべてのキーのリストを提供したときに、優れたパフォーマンスが得られmap.getAll(containedKeys)
ました。EntryListener
並行セットに含まれるキーを格納するマップに を追加することによって、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 では見られました。アプリケーションを完全に停止させます。jar を再度 2.5 に置き換え (および名前を Entry から MapEntry に戻します)、何も問題はありません。
何が原因でしょうか? ニアキャッシュをもう使用していないのでしょうか?