31.6.3. クラスタリングのチューニング

クラスター内でアプリケーションが実行され、 特にクラスター周囲で高ボリュームのステートレプリケーションが実行される場合、 パフォーマンスを最適化できる方法がいくつかあります。 パフォーマンスの最適化を行う場合は、 変更により予想通りの結果を得られたか検証するため、 常に変更前と変更後にアプリケーションの負荷テストを行うようにしてください。 また、 どの変更によりどの結果を得られるかを明確にするため、 変更は 1 つずつ行ってください。

31.6.3.1. 十分なネットワークバッファーの確保

Enterprise Application Platform は、 UDP ベースの IP マルチキャストを利用するため、 クラスター間の通信に UDP を使用します。 UDP の欠点は、 TCP では OS ネットワークレベルで提供される無損失伝送を Java コードに実装する必要があることです。 最良のパフォーマンスを得るには、 ネットワーク層にドロップされる UD Pパケットの頻度を低くすることが重要です。 クラスターノードをホストしているマシン上のネットワークバッファのサイズが十分でないことが、 パケット損失の原因となっていることが多くあります。 Enterprise Application Platform のクラスタリングコードは、 ソケットを開く時に十分な大きさの読み書きバッファを要求しますが、 多くのオペレーティングシステムは (Window は例外) 最大サイズまでのバッファを提供するだけです。最大読み書きバッファサイズは OS レベルで設定できますが、 デフォルト値は最良のパフォーマンスを実現するには低すぎます。 そのため、 Enterprise Application Platform のクラスタリングコードが要求するクラスターサイズを OS に設定することが簡単なチューニング手順となります。
最大許可バッファーサイズを増やす設定手順は OS に固有しているため、 手順は OS の説明書を参照してください。Linux システムでは、次のように /etc/sysctl.conf ファイルを編集してバッファーサイズの最大値を設定し、 マシンの再起動後も設定を維持するようにします。
# Allow a 25MB UDP receive buffer for JGroups
net.core.rmem_max = 26214400
# Allow a 1MB UDP send buffer for JGroups
net.core.wmem_max = 1048576