Hazelcast バージョン 3.3.1 を使用しています。
c3.2xlarge サーバーを使用して aws で実行されている 9 ノードのクラスターがあります。
分散エグゼキュータ サービスと分散マップを使用しています。
分散エグゼキュータ サービスは単一のスレッドを使用します。分散マップは、レプリケーションもニア キャッシュもなしで構成され、Kryo シリアライザーを使用してサイズ 1 ~ 2kb の約 100 万個のオブジェクトを格納します。
私のユースケースは次のようになります。
- 9 つのノードすべてが、分散エグゼキュータ サービスで常に同期リモート操作を実行し、毎秒約 20,000 ヒット (ノードあたり約 2,000) を生成します。
- 呼び出しは、Hazelcast API: com.hazelcast.core.IExecutorService#executeOnKeyOwner を使用して実行されます。
- 各操作は、パーティションを所有するノード上の分散マップにアクセスし、格納されたオブジェクトを使用して計算を行い、オブジェクトをマップに格納します。(そのために、IMap オブジェクトの get および set API を使用します)。
時々、Hazelcast は次のようなタイムアウト例外に遭遇します:
com.hazelcast.core.OperationTimeoutException: No response for 120000 ms. 呼び出しを中止します! BasicInvocationFuture{invocation=BasicInvocation{ serviceName='hz:impl:mapService'、op=GetOperation{}、partitionId=212、replicaIndex=0、tryCount=250、tryPauseMillis=500、invokeCount=1、callTimeout=60000、target=Address[ 172.31.44.2]:5701, backupsExpected=0, backupsCompleted=0}, response=null, done=false} 応答がありません! バックアップが期待されます:0 バックアップが完了しました: 0
場合によっては、マップ パーティションが移行し始め、さらに悪いことに、ノードが頻繁にクラスターから離れて再参加することがわかります。この問題を解決するには、クラスター全体を再起動するしかありません。
Hazelcast がマップ取得操作を 120 秒間ブロックする原因は何ですか?
同じサーバー上の他のサービスは問題なく動作するため、ネットワーク関連ではないと確信しています。また、サーバーはほとんどアイドル状態 (~70%) であることにも注意してください。
私の使用例に関するフィードバックは、非常に高く評価されます。