9 TCMPの動作のチューニング
この章の内容は次のとおりです。
- TCMPデータ転送の概要
TCMPは、クラスタ・メンバーの検出、クラスタの管理、サービスのプロビジョニングおよびデータの伝送に使用する、IPベースのプロトコルです。 - データ転送速度の調整
データの転送速度は<flow-control>
要素と<traffic-jam>
要素を使用して制御します。 - 負荷を低減するためのパケットのバンドリング
複数の小さいパケットを1つの大きいパケットにバンドルして、ネットワーク・スイッチ・インフラストラクチャへの負荷を低減できます。 - パケットの再転送動作の変更
肯定応答が得られないパケットは、パケット・パブリッシャに構成した再送信間隔に基づいて再転送されます。 - パケット・バッファのサイズの構成
オペレーティング・システムに対してバッファ処理を要求するパケットの数を制御するようにパケット・バッファを構成できます。 - パケットの最大サイズの調整
クラスタ通信の効率とスループットが最適になるようにパケットの最大サイズと最適サイズを調整できます。 - パケット・スピーカーのボリュームしきい値の変更
ネットワークの送信操作がブロックされている可能性があることをpacket-publisher
が検出すると、パケット・スピーカーはネットワークにパケットを送信します。 - 受信メッセージ・ハンドラの構成
受信メッセージ・ハンドラは、パケットを論理メッセージにアセンブルし、それを適切なCoherenceサービスにディスパッチして処理できるようにします。 - TCMPソケット・プロバイダ実装Coherenceの変更
Coherenceは、クラスタ・サービス・メンバー間のTCMP通信にUDP/IPマルチキャストとUDP/IPユニキャストの組合せを使用します。追加のソケット・プロバイダ実装が使用可能であり、必要に応じてそれを指定できます。 - トランスポート・プロトコルの変更
Coherenceは、データ・サービス・メンバー間の信頼性のあるポイントツーポイント通信に、TCP/IPメッセージ・バスを使用します。追加のトランスポート・プロバイダ実装が使用可能であり、必要に応じてそれを指定できます。 - TMBのCRC検証の有効化
TCP/IPメッセージ・バス(TMB)には、ネットワーク上で送信されるネットワーク・メッセージを検証する循環冗長性チェック(CRC)の実装が組み込まれています。CRCは一般的に、ネットワーク内のメッセージ破損を検出して処理するために使用されます。
親トピック: Coherenceクラスタの使用
TCMPデータ転送の概要
TCMPプロトコルは非常にチューニング性が高いため、特定のネットワーク・トポロジの利用や、地理的に分散したクラスタにある低帯域幅で長待機時間のセグメントに対する許容差の追加が可能です。Coherenceには出荷時の初期設定の構成があります。TCMP属性の中には、実行時に動的に自己構成できるものがありますが、デプロイ目的でそれらをオーバーライドすることやロックダウンすることも可能です。TCMPの動作は、パフォーマンスのテストに基づいて変更する必要があります。Coherenceには、ネットワーク上でのTCMPのデータ転送パフォーマンスを評価するために使用できるデータグラム・テストが用意されています。Oracle Coherenceの管理のネットワーク・パフォーマンス・テストの実行を参照してください。
TCMPデータ転送の動作は、tangosol-coherence-override.xml
ファイルの中で、<packet-publisher>
、<packet-speaker>
、<incoming-message-handler>
および<outgoing-message-handler>
の各要素を使用して構成します。オペレーション構成の要素を参照してください。
TCMPの理解も参照してください。
親トピック: TCMPの動作のチューニング
データ転送速度の調整
<flow-control>
要素と<traffic-jam>
要素を使用して制御します。これらの要素は、パケット障害の発生を最小限に抑えて最大のスループットを実現するのに役立ちます。ネットワークが低速な場合やパケット・バッファが小さい場合は、ここで説明する速度調整設定を変更することが普通です。
この項には次のトピックが含まれます:
パケットのフロー制御動作の調整
フロー制御を使用して、所定のクラスタ・メンバーへのパケット転送速度を動的に調整します。この調整は、Point-to-Point転送でのクラスタ・メンバーの応答性を数値化した統計に基づいて実行されます。フロー制御は、応答できなくなったクラスタ・メンバーが大量のパケットであふれる状況を防止します。
<flow-control>
要素でフロー制御を構成します。フロー制御の動作を調整するための設定には、次の2つがあります。
-
<pause-detection>
- 応答しなくなったクラスタ・メンバーに再送信するパケットの最大数を制御する設定です。この数のパケットを送信しても応答しないメンバーは一時停止していると判断されます。一時停止していると判断されたクラスタ・メンバー宛てのパケットは、そのメンバーが応答を再開するまで低速で送信されます。ガベージ・コレクションの実行時間が長いと、このような一時停止が発生します。この値は<maximum-packets>
要素を使用して指定します。デフォルトのパケット数は16
です。0
を指定すると、一時停止の検出が無効になります。 -
<outstanding-packets>
- クラスタ・メンバーに送信する未確認パケットの数を定義する設定です。送信した未確認パケット数がこの値に達すると、以降はそのメンバーにパケットを遅延送信します。この値には、<maximum-packets>
要素を使用して数値を明示的に指定するか、<maximum-packets>
要素と<minimum-packets>
要素の両方を使用して値の範囲を指定します。範囲を指定すると、この設定はネットワーク統計に基づいて動的に調整されます。最大値には256パケットを超える値を指定する必要があり、デフォルト値は4096パケットです。最小値には16パケットを超える値を指定する必要があり、デフォルト値は64パケットです。
フロー制御の動作を調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<pause-detection>
要素と<outstanding-packets>
要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-delivery> <flow-control> <pause-detection> <maximum-packets>32</maximum-packets> </pause-detection> <outstanding-packets> <maximum-packets>2048</maximum-packets> <minimum-packets>128</minimum-packets> </outstanding-packets> </flow-control> </packet-delivery> </packet-publisher> </cluster-config> </coherence>
親トピック: データ転送速度の調整
パケットのフロー制御の無効化
フロー制御を無効にするには、オペレーション・オーバーライド・ファイルを編集して、<flow-control>
要素の中に、false
に設定した<enabled>
要素を追加します。たとえば
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-delivery> <flow-control> <enabled>false</enabled> </flow-control> </packet-delivery> </packet-publisher> </cluster-config> </coherence>
親トピック: データ転送速度の調整
パケット・トラフィック混雑の動作の調整
パケット・トラフィック混雑とは、クライアント・スレッドによりエンキューされ、パブリッシャがネットワークへの送信を待機している保留パケットの数が、パケット・パブリッシャによって許容不可と判断されるレベルに達した状態です。<traffic-jam>
要素でトラフィック混雑の動作を構成します。トラフィック混雑の動作を調整する設定には、次の2つがあります。
-
<maximum-packets>
- パケット・パブリッシャで許容できる保留パケットの最大数を制御する設定です。保留パケット数がこの値を超えると、輻輳が発生していると判断され、その場合はクライアント・リクエスト(システム・スレッド以外のローカル・スレッドからのリクエスト)の速度を遅くする必要があります。この構成した上限パケット数を超えると、未処理のパケット数がこの指定した上限値を下回るまで、クライアント・スレッドは強制的に一時停止状態になります。この設定で再送信キューのサイズを制限することにより、予期しないメモリー不足状態のほとんどは発生しなくなります。0
を指定すると、この上限は設定されません。デフォルト値は8192
です。 -
<pause-milliseconds>
- パケット・パブリッシャが輻輳状態のときにメッセージを送信しようとするクライアント・スレッドを一時停止する時間(ミリ秒)を制御する設定です。パブリッシャは、渋滞が解消されるまでメッセージの送信を許可せず、このプロパティで指定された期間中、スレッドのスリープ処理を繰り返します。デフォルト値は10
です。
パケット上限値が小さすぎる場合や一時停止時間が長すぎる場合は、パブリッシャによってすべての保留パケットが送信され、送信するパケットがなくなることがあります。この状態が検出されると、定期的に警告がログに記録されます。理想的な値は、パブリッシャで実行する処理がなくならず、同時にキューが制御できないほど大きくならないような値です。一時停止時間は短い時間(10ミリ秒以下)に設定し、パケット数の上限は大きい値(5000を超える値)に設定します。
<traffic-jam>
要素と<flow-control>
要素を使用した設定はPoint-to-Pointモードで動作し、受信側に未処理パケットが多数存在する場合は送信のみがブロックされます。<traffic-jam>
要素の<maximum-packets>
サブ要素の値を、<outstanding-packets>
要素の<maximum-packets>
値よりも大きく設定することをお薦めします。<flow-control>
が無効な場合、<traffic-jam>
では未処理のパケットがすべて考慮されます。
エンキュー動作の速度を調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-packets>
要素と<pause-milliseconds>要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <traffic-jam> <maximum-packets>8192</maximum-packets> <pause-milliseconds>10</pause-milliseconds> </traffic-jam> </packet-publisher> </cluster-config> </coherence>
親トピック: データ転送速度の調整
負荷を低減するためのパケットのバンドリング
<packet-bundling>
要素内で構成され、次の設定を含んでいます。
-
<maximum-defferal-time>
- 別のパケットのバンドルを待機している間のパケットの最大遅延時間を指定する設定です。この値を0に設定すると、待機のないアルゴリズムとなり、即座にアクセスできるパケットのみがバンドルされます。0より大きい値を設定すると、追加のパケットが得られるまで待機する間に、多少の送信遅延が発生します。スループットに有害な影響が出ないように、通常この値は250マイクロ秒未満に設定します。単位を指定しない場合は、ナノ秒と見なされます。デフォルト値は1us
(マイクロ秒)です。 -
<agression-factor>
- パケット遅延アルゴリズムのアグレッシブさを指定する設定です。<maximum-deferral-time>
要素は遅延時間の上限を定義しますが、<aggression-factor>
要素は平均の遅延時間に影響します。積極性の値が高いほど、パブリッシャが追加のパケットを待つ時間が長くなります。この係数は実数で表します。多くの場合は待機時間を最小に抑えながらパケットの使用率を上げることができるように、0.0から1.0の値を使用します。デフォルト値は0
です。
デフォルトのpacket-bundlingの設定は積極性が最小で、測定可能な遅延なしでバンドルが発生することを許容します。より積極的なバンドリングの利点は、ネットワーク・インフラストラクチャとアプリケーション・オブジェクトの一般的なデータ・サイズおよびアクセス・パターンにより異なります。
パケットのバンドリング動作を調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-defferal-time>要素と<agression-factor>
要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-delivery> <packet-bundling> <maximum-deferral-time>1us</maximum-deferral-time> <aggression-factor>0</aggression-factor> </packet-bundling> </packet-delivery> </packet-publisher> </cluster-config> </coherence>
親トピック: TCMPの動作のチューニング
パケットの再転送動作の変更
否定応答(NACK)パケットは、パケットが正しく受信されていないことを示すものなので、そのパケットは再転送されます。受信したパケットの順序を検査してパケットの損失があることがわかると、否定応答が送信されます。否定応答があると、パブリッシャの再送信間隔に関係なく、はるかに早いタイミングでパケットが再送信されます。否定応答の無効化を参照してください。
この項には次のトピックが含まれます:
パケットの再送信間隔の変更
パケットの再送信間隔は、送信に対応するACKパケットをパケット・パブリッシャが待機する最小時間(ミリ秒)を指定します。この時間が経過するとパケットが再送信されます。デフォルトの再送信間隔は200
ミリ秒です。
パケットの再送信間隔を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<resend-milliseconds>
要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-delivery> <resend-milliseconds>400</resend-milliseconds> </packet-delivery> </packet-publisher> </cluster-config> </coherence>
親トピック: パケットの再転送動作の変更
パケットの再送信タイムアウトの変更
パケットの再送信タイムアウト間隔は、ACKパケットが受信されない場合にパケットの再送信を継続する最長時間(ミリ秒)を指定します。このタイムアウトが経過すると、受信側が終了しているかどうかの判断が下されます。これを決定するには、他のノードがその受信者と通信できているかどうかなど、他のデータも考慮されます。デフォルト値は300000
ミリ秒です。本番環境で使用する場合の推奨値は、300000を超え、予想される最大のGCの全所要時間の2倍より大きな値です。
ノート:
デフォルトの停止検出メカニズムはTCPリング・リスナーです。このリスナーは、再送信タイムアウト間隔が経過する前に、障害が発生しているクラスタ・メンバーを検出します。停止検出の構成を参照してください。
パケットの再送信タイムアウト間隔を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<timeout-milliseconds>
要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-delivery> <timeout-milliseconds>420000</timeout-milliseconds> </packet-delivery> </packet-publisher> </cluster-config> </coherence>
親トピック: パケットの再転送動作の変更
パケットの肯定応答遅延の構成
ACKパケットおよびNACKパケットの送信を必要に応じて変更できるようになるまでパケット・パブリッシャが待機する時間です。ACKパケットとNACKパケットの遅延間隔は、次の設定を使用して<notification-queueing>
要素の中で構成します。
-
<ack-delay-milliseconds>
- ACKパケットを送信するまでパケット・パブリッシャが遅延する最長時間(ミリ秒)を指定する要素です。複数の肯定応答をまとめてACKパケットが満たされると、より早いタイミングでそのACKパケットが送信されることがあります。リモート・メンバーのパケット配信再送信タイムアウトが経過する前にACKを受信して処理する時間を十分に確保できるように、リモート・メンバーのパケット配信再送信タイムアウトよりも相当に小さい値を設定する必要があります。デフォルト値は16
です。 -
<nack-delay-milliseconds>
- NACKパケットを送信するまでパケット・パブリッシャが遅延する最長時間(ミリ秒)を指定する要素です。デフォルト値は1
です。
ACKおよびNACKの遅延間隔を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<ack-delay-milliseconds>
要素と<nack-delay-milliseconds>
要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <notification-queueing> <ack-delay-milliseconds>32</ack-delay-milliseconds> <nack-delay-milliseconds>1</nack-delay-milliseconds> </notification-queueing> </packet-publisher> </cluster-config> </coherence>
親トピック: パケットの再転送動作の変更
パケット・バッファのサイズの構成
この項には次のトピックが含まれます:
パケット・バッファのサイズ設定の理解
パケット・バッファのサイズは、次の設定を使用して、パケット数またはバイト数に基づいて構成できます。
-
<maximum-packets>
- データグラム・ソケットに対してソケット自身のサイズを調整してバッファすることを要求するパケット数を(構成済のパケット・サイズに基づいて)指定します。詳細は、java.net.SocketOptions#SO_SNDBUF
プロパティおよびjava.net.SocketOptions#SO_RCVBUF
プロパティを参照してください。基礎となるソケットの実装で一定のサイズ以上をサポートできない場合、実際のバッファ・サイズは小さくなることがあります。パケットの最大サイズの調整を参照してください。 -
<size>
- 基礎となるソケット・バッファに要求されるサイズをバイト単位で指定します。
オペレーティング・システムでは、指定されたパケット・バッファ・サイズを参考値として扱うにすぎず、指定の量を割り当てることは要求されません。割り当てられた領域が要求量よりも少ないと、Coherenceでは警告が発行され、領域が制限されたバッファを使用して稼動を継続するので、十分なパフォーマンスが得られない可能性があります。Oracle Coherenceの管理のソケット・バッファ・サイズを参照してください。
領域が大きいインバウンド・バッファを使用すると、Javaのガベージ・コレクタに起因するJVMの一時停止からCoherenceのネットワーク層を保護するうえで効果的です。JVMが一時停止している間、Coherenceではどのインバウンド・ソケットからもパケットをデキューできません。パケット・バッファのオーバーフローを引き起こすほど一時停止時間が長いと、発信元ノードがパケット消失を検出してパケットを再送信する必要があるため、パケットの受信が遅延します。
親トピック: パケット・バッファのサイズの構成
アウトバウンド・パケット・バッファのサイズの構成
アウトバウンド・パケット・バッファは、パケットを転送するときにパケット・パブリッシャで使用します。バッファのサイズを変更するときは、スループットと待機時間の両面からパフォーマンスを評価する必要があります。バッファのサイズを大きくするとスループットが増加し、逆に小さくすると待機時間が短くなります。
アウトバウンド・パケット・バッファのサイズを構成するには、オペレーション・オーバーライド・ファイルを編集して、<packet-publisher>
ノードに<packet-buffer>
要素を追加し、<size>
要素(バイト単位)または<maximum-packets>
要素(パケット数単位)を使用してパケット・バッファのサイズを指定します。デフォルト値は32パケットです。次の例では、パケット数に基づいてパケット・バッファのサイズを指定しています。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-buffer> <maximum-packets>64</maximum-packets> </packet-buffer> </packet-publisher> </cluster-config> </coherence>
親トピック: パケット・バッファのサイズの構成
インバウンド・パケット・バッファのサイズの構成
マルチキャスト・リスナーとユニキャスト・リスナーはそれぞれ専用のインバウンド・パケット・バッファを備えています。
インバウンド・パケット・バッファのサイズを構成するには、オペレーション・オーバーライド・ファイルを編集して、(<multicast-listener>
ノードまたは<unicast-listener>
ノードに) <packet-buffer>
要素を追加し、<size>
要素(バイト単位)または<maximum-packets>
要素(パケット数単位)を使用してパケット・バッファのサイズを指定します。デフォルト値は、マルチキャスト・リスナーで64パケット、ユニキャスト・リスナーで1428パケットです。
次の例では、ユニキャスト・リスナーのパケット・バッファのサイズをバイト数で指定しています。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <packet-buffer> <size>1500000</size> </packet-buffer> </unicast-listener> </cluster-config> </coherence>
次の例では、マルチキャスト・リスナーのパケット・バッファのサイズをパケット数で指定しています。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-buffer> <maximum-packets>128</maximum-packets> </packet-buffer> </packet-publisher> </cluster-config> </coherence>
親トピック: パケット・バッファのサイズの構成
パケットの最大サイズの調整
ノート:
Microsoft Windowsで1024バイトを超えるパケット・サイズを指定する場合、転送速度が最適になるようにレジストリ設定を調整する必要があります。COHRENCE_HOME
/bin/optimize.reg
登録ファイルにはレジストリ設定が保存されています。Oracle Coherenceの管理のデータグラム・サイズ(Microsoft Windows)を参照してください。
パケットのサイズは<packet-size>
要素で構成し、次の設定を指定します。
-
<maximum-length>
- すべてのクラスタ・メンバーが問題なく処理できるパケット・サイズをバイト単位で指定します。この値は、クラスタ内のすべてのメンバーで同一にする必要があります。小さい値を設定することでクラスタの最大サイズを意図的に制限できます。この値は512以上とする必要があります。デフォルト値は64KBです。 -
<preferred-length>
- ユニキャスト・ソケットおよびマルチキャスト・ソケットで送受信されるDatagramPacket
オブジェクトの最適サイズをバイト単位で指定します。これには
<maximum-length>
値よりも大きい値または小さい値を指定できます。この値は、クラスタ内のすべてのメンバーで同一にする必要はありません。理想的な値は、UDPパケット・ヘッダー(32バイト)またはTCPパケット・ヘッダー(52バイト)用の十分な容量を確保しながら、ネットワークのMTUの範囲に収まる値です。この値は512以上とする必要があります。デフォルト値は、ローカル・ノードのMTUに基づいて自動的に計算されます。MTUを取得できない場合は1500のMTUが使用され、パケット・ヘッダーにあわせて調整されます(UDPの場合は1468、TCPの場合は1448)。
このパケット・サイズを調整するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-length>
要素と<preferred-length>
要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-size> <maximum-length>49152</maximum-length> <preferred-length>1500</preferred-length> </packet-size> </packet-publisher> </cluster-config> </coherence>
親トピック: TCMPの動作のチューニング
パケット・スピーカーのボリュームしきい値の変更
packet-publisher
が検出すると、パケット・スピーカーはネットワークにパケットを送信します。
ノート:
パケット・スピーカーは、データ通信のデフォルト・プロトコルであるTCMP/TMBには使用されません。
パケットの負荷が比較的低い場合、スピーカーの操作をパブリッシャのスレッドで実行すると効率が向上することがあります。パケットの負荷が高い場合、スピーカーを使用すると、スピーカーによってネットワーク上でパケットを送信しながらパブリッシャはパケットの準備を続けることができます。
パケット・スピーカーを構成するには、<volume-threshold>
要素を使用して、アクティブにするスピーカー・デーモンに送信できるようにしておくことが必要な最小のパケット数を指定します。値を指定しない場合は(デフォルト)、パケット・バッファに合わせて値が設定されます。
パケット・スピーカーのボリュームしきい値を指定するには、オペレーション・オーバーライド・ファイルを編集して、次のように<volume-threshold>
要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-speaker> <enabled>true</enabled> <volume-threshold> <minimum-packets>32</minimum-packets> </volume-threshold> </packet-speaker> </cluster-config> </coherence>
親トピック: TCMPの動作のチューニング
受信メッセージ・ハンドラの構成
<incoming-message-handler>
要素内で構成されます。
この項には次のトピックが含まれます:
親トピック: TCMPの動作のチューニング
時刻差異の変更
<maximum-time-variance>
要素では、新しいクラスタ・メンバーのシステム時刻と現在のクラスタ時刻との間の差異を測定する際に、ブロードキャスト・メッセージの送受信間の最大時刻差異を指定します。差異が小さいほど、クラスタ内で実行中の複数のシステム間でクラスタ時刻が接近する確率が高まりますが、クラスタに参加するプロセスは、指定された差異内でメッセージの交換が起こることが可能になるまで延長されます。通常は、20ミリ秒程度の値で十分ですが、負荷の高いクラスタや複数のネットワーク・ホップでは、より大きな値が必要になる場合があります。デフォルト値は16
です。
最大の時刻差異を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のように<maximum-time-variance>
を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <incoming-message-handler> <maximum-time-variance>16</maximum-time-variance> </incoming-message-handler> </cluster-config> </coherence>
親トピック: 受信メッセージ・ハンドラの構成
否定応答の無効化
受信メッセージ・ハンドラに対して、否定応答を無効化できます。無効にすると、パケットが正しく受信されていなくても、ハンドラはそのパケットの送信側に何も通知しません。この場合、パケットの送信側は、指定の再送信タイムアウト間隔の経過を待ったうえでパケットを再送信します。パケットの再転送動作の変更を参照してください。
否定応答を無効にするには、オペレーション・オーバーライド・ファイルを編集して、false
に設定した<use-nack-packets>
要素を追加します。たとえば:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <incoming-message-handler> <use-nack-packets>false</use-nack-packets> </incoming-message-handler> </cluster-config> </coherence>
親トピック: 受信メッセージ・ハンドラの構成
TCMPソケット・プロバイダ実装の変更
<unicast-listener>
要素でユニキャスト・リスナー向けに構成します。
この項には次のトピックが含まれます:
TCPソケット・プロバイダの使用
TCPソケット・プロバイダは、可能なかぎりTCPベースのソケットを生成するソケット・プロバイダです。このソケット・プロバイダは、TCPによってバッキングされるDatagramSocket
のインスタンスを作成します。WKA機能とともに使用するTCMPは(マルチキャストを無効化)、UDPを必要とせずにTCPを介して全面的に機能します。
ノート:
WKA機能を併用せずにこのソケット・プロバイダを使用すると(マルチキャストを有効化)、すべてのユニキャスト通信にTCPが使用されます。マルチキャストは、グループベースの通信に使用されます。
TCPソケット・プロバイダでは、クラスタ・メンバーのペアごとに最大で2つのTCP接続を使用します。このTCPトラフィックは、ブロックしないNIOベースのソケットを使用してすべて管理されるので、トラフィック管理用のスレッドが別に追加されることはありません。したがって、既存のTCMPスレッドですべての接続を扱います。これらの接続は要求に応じて使用され、なんらかの理由で切断されると、必要に応じて自動的に再度開放されます。送信/受信の競合の低減とパフォーマンスの顕著な向上を図るために、2つの接続が使用されます。TCMPでは、信頼できるプロトコルを使用していることをほとんど認識していないので、保証済の配信とフロー制御を引き続き管理しています。
TCPソケット・プロバイダを指定するには、オペレーション・オーバーライド・ファイルを編集して、tcp
の値を指定した<socket-provider>
要素を追加します。たとえば:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <socket-provider system-property="coherence.socketprovider">tcp </socket-provider> </unicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.socketprovider
システム・プロパティを使用してこのソケット・プロバイダを指定できます。たとえば:
-Dcoherence.socketprovider=tcp
親トピック: TCMPソケット・プロバイダ実装の変更
SDPソケット・プロバイダの使用
SDPソケット・プロバイダは、JVMおよび基礎となるネットワーク・スタックでSDPがサポートされている場合に、可能であれば常にSDPベースのソケットを生成するソケット・プロバイダです。このソケット・プロバイダは、SDPによってバッキングされるDatagramSocket
のインスタンスを作成します。WKA機能とともに使用するTCMPは(マルチキャストを無効化)、UDPを必要とせずにSDPを介して全面的に機能します。
ノート:
WKA機能を併用せずにこのソケット・プロバイダを使用すると(マルチキャストを有効化)、すべてのユニキャスト通信にSDPが使用されます。マルチキャストは、グループ・ベースの通信に使用されます。
SDPソケット・プロバイダを指定するには、オペレーション・オーバーライド・ファイルを編集して、sdp
の値を指定した<socket-provider>
要素を追加します。たとえば:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <socket-provider system-property="coherence.socketprovider">sdp </socket-provider> </unicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.socketprovider
システム・プロパティを使用してこのソケット・プロバイダを指定できます。たとえば:
-Dcoherence.socketprovider=sdp
親トピック: TCMPソケット・プロバイダ実装の変更
SSLソケット・プロバイダの使用
SSLソケット・プロバイダは、SSLで保護したソケットのみを生成するソケット・プロバイダです。このソケット・プロバイダは、SSL/TCPまたはSSL/SDPによってバッキングされるDatagramSocket
のインスタンスを作成します。マルチキャスト・ソケットに対してはSSLがサポートされていないので、このプロバイダでTCMPが機能するためにはWKA機能(マルチキャストを無効化)を使用する必要があります。
デフォルトのSSL構成を使用すると、信頼できるすべてのピアが単一のJKSキーストアにあるピア信頼に基づいて、双方向のSSL接続を容易に構成できます。より詳細な構成を別のアイデンティティ・マネージャおよびトラスト・マネージャで定義することで、認証局による信頼の検証が可能になります。Oracle Coherenceの保護のSSLを使用したTCMP通信の保護を参照してください。
親トピック: TCMPソケット・プロバイダ実装の変更
トランスポート・プロトコルの変更
Coherenceは、データ・サービス・メンバー間の信頼性のあるポイントツーポイント通信に、TCP/IPメッセージ・バスを使用します。追加のトランスポート・プロバイダ実装が使用可能であり、必要に応じてそれを指定できます。
この項には次のトピックが含まれます:
トランスポート・プロトコルの変更の概要
Coherenceでは、複数のトランスポート・プロトコルがサポートされます。デフォルトでは、すべてのデータ・サービスが、ユニキャスト・リスナー用に構成されたトランスポート・プロトコルを使用します。この構成の結果、共有トランスポート・インスタンスが作成されます。また、サービス固有のトランスポート・インスタンスを生成するサービスのトランスポート・プロトコルを明示的に指定することもできます。サービス固有のトランスポート・インスタンスは、パフォーマンスが高くなりますが、かわりにリソース消費量が増加します。一般的に、共有トランスポート・インスタンスでは、サービス固有のトランスポート・インスタンスよりもリソース消費量が少なくなります。
Coherenceでは、信頼性のある次のトランスポート・プロトコルがサポートされます。
-
datagram
– UDPプロトコル -
tmb
(デフォルト) – TCP/IPメッセージ・バス・プロトコル -
tmbs
– SSL対応TCP/IPメッセージ・バス・プロトコル。TMBSでは、SSLソケット・プロバイダの使用が必要です。SSLソケット・プロバイダの使用を参照してください。 -
sdmb
– ソケット・ダイレクト・プロトコル(SDP)メッセージ・バス。 -
sdmbs
– SSL対応SDPメッセージ・バス。SDMBSでは、SSLソケット・プロバイダを使用する必要があります。SSLソケット・プロバイダの使用を参照してください。 -
imb
( Exalogicのデフォルト・トランスポート・プロトコル) – InfiniBandメッセージ・バス。IMBは、TCMPがSSLで構成されていないかぎり、Exalogicシステムで自動的に使用されます。
親トピック: トランスポート・プロトコルの変更
共有トランスポート・プロトコルの変更
信頼性の高いポイントツーポイント通信を実現するために使用されるデフォルトのトランスポート・プロトコルをオーバーライドできます。すべてのデータ・サービスは、指定されたトランスポート・プロトコルの共有インスタンスを使用します。
共有トランスポート・プロトコルを指定するには、オペレーション・オーバーライド・ファイルを編集して、<unicast-listener>
要素内に<reliable-transport>
要素を追加します。たとえば:
<?xml version='1.0'?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config
coherence-operational-config.xsd">
<cluster-config>
<unicast-listener>
<reliable-transport system-property="coherence.transport.reliable">tmbs
</reliable-transport>
</unicast-listener>
</cluster-config>
</coherence>
この値は、coherence.transport.reliable
システム・プロパティを使用して設定することもできます。
親トピック: トランスポート・プロトコルの変更
サービス・タイプごとのトランスポート・プロトコルの変更
データ・サービスが信頼性のあるポイントツーポイント通信に使用するトランスポート・プロトコルを変更できます。サービスに対してトランスポート・インスタンスが1つ作成され、他のサービスとは共有されません。サービス固有のトランスポート・インスタンスは、優先度の高い一部のサービスに対して慎重に使用してください。
サービス・タイプごとにトランスポート・プロトコルを変更するには、オペレーション・オーバーライド・ファイルにあるサービス定義のreliable-transport
初期化パラメータをオーバーライドします。次の例では、DistributedCache
サービスのトランスポート・プロトコルを変更します。
<?xml version='1.0'?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config
coherence-operational-config.xsd">
<cluster-config>
<services>
<service id="3">
<init-params>
<init-param id="26">
<param-name>reliable-transport</param-name>
<param-value system-property="coherence.distributed.transport.reliable">tmbs</param-value>
</init-param>
</init-params>
</service>
</services>
</cluster-config>
</coherence>
reliable-transport
初期化パラメータは、DistributedCache
、ReplicatedCache
、OptimisticCache
、Invocation
、Proxy
およびFederatedCache
の各サービスに設定できます。特定のサービスのreliable-transport
パラメータのオーバーライドに使用する適切なサービスIDおよび初期化パラメータIDについては、coherence.jar
ファイルにあるtangosol-coherence.xml
ファイルを参照してください。
各サービス・タイプにも、それぞれトランスポート・プロトコルを設定するシステム・プロティがあります。
coherence.distributed.transport.reliable
(FederatedCache
サービスにも使用されます)
coherence.replicated.transport.reliable
coherence.optimistic.transport.reliable
coherence.invocation.transport.reliable
coherence.proxy.transport.reliable
親トピック: トランスポート・プロトコルの変更
TMBのCRC検証の有効化
TCP/IPメッセージ・バス(TMB)には、ネットワーク上で送信されるネットワーク・メッセージを検証する循環冗長性チェック(CRC)の実装が組み込まれています。CRCは一般的に、ネットワーク内のメッセージ破損を検出して処理するために使用されます。
CRC実装は、メッセージ本文に基づくチェック値を計算し、その値をメッセージ・ヘッダーに追加します。結果のメッセージ・ヘッダーに基づいてさらに確認値が計算され、同様にメッセージを送信する前にメッセージ・ヘッダーに追加されます。TMBがメッセージを受信すると、メッセージとともに送信された値に対して確認値が再計算および検証されます。CRCの検証が失敗してパケットの破損が示された場合は、バス接続が移行されます。
CRCはデフォルトでは無効です。CRCを有効にすると、パフォーマンス、特にデータを可変化するキャッシュ操作のパフォーマンスに影響します(put
、invoke
および類似の操作で、パフォーマンスへの影響は約5%)。
CRC検証を有効にするには、すべてのクラスタ・メンバーで次のシステム・プロパティを設定します:
-Dcom.oracle.common.internal.net.socketbus.SocketBusDriver.crc=true
親トピック: TCMPの動作のチューニング