ページの先頭行へ戻る
Enterprise Application Platform V1.1.0 GlassFishユーザーズガイド
FUJITSU Software

7.3.2 通信データサイズに関する注意事項

最大メッセージ分割サイズのチューニング

IIOP通信において、メッセージを送信する側では、シリアライズ完了後、最大メッセージ分割サイズ毎にフラグメント(分割)して、送信します。メッセージを受信する側では、最大メッセージ分割サイズまで受信すると、デシリアライズ処理を開始します。

つまり、最大メッセージ分割サイズが小さいほど、早くデシリアライズ処理を開始します。

しかし、フラグメント数(通信データ量/最大メッセージ分割サイズ)が多いと、送信処理回数やデータ量が増加します。

最大メッセージ分割サイズと性能の関係
チューニング値の目安

フラグメント数の大小によるメリットデメリットがトレードオフの関係であること、マシンスペックなど環境依存で処理時間が変わることから、最速値となる一般的な指標を出すことは困難ですが、大体の目安として10分割程度を目安としてください。

データサイズ

最大メッセージ分割サイズの目安

10000byteまで

最大メッセージ分割サイズはデフォルト(1024)のままで問題ありません。

100000byteまで

最大メッセージ分割サイズは8192としてください。

300000byteまで

最大メッセージ分割サイズは32768としてください。

上記を超える場合

最大メッセージ分割サイズは64000としてください。

設定値が64000を超えると受信側のバッファ拡張が必要となるため、64000より大きいサイズを設定することは推奨しません。

データサイズが自身でわからない場合は、IIOPアクセスログをTRACEモードで採取し、以下の例に記載する方法で確認してください。IIOPアクセスログの出力モードについては、「IIOPアクセスログの出力モード」を参照してください。

IIOPアクセスログの出力結果

[29/Aug/2014 09:31:36.101 +0900] "70(p: thread-pool-1; w: 5)" "OUT(SV) Fragment(request_id=1211, client=192.0.2.2:51375, server=192.0.2.2:25700, more=true)"
[29/Aug/2014 09:31:36.101 +0900] "70(p: thread-pool-1; w: 5)" "OUT(SV) Fragment(request_id=1211, client=192.0.2.2:51375, server=192.0.2.2:25700, more=true)"
[29/Aug/2014 09:31:36.101 +0900] "70(p: thread-pool-1; w: 5)" "OUT(SV) Fragment(request_id=1211, client=192.0.2.2:51375, server=192.0.2.2:25700, more=true)"
[29/Aug/2014 09:31:36.101 +0900] "70(p: thread-pool-1; w: 5)" "OUT(SV) Fragment(request_id=1211, client=192.0.2.2:51375, server=192.0.2.2:25700, more=true)"
[29/Aug/2014 09:31:36.101 +0900] "70(p: thread-pool-1; w: 5)" "OUT(SV) Fragment(request_id=1211, client=192.0.2.2:51375, server=192.0.2.2:25700, more=true)"
[29/Aug/2014 09:31:36.101 +0900] "70(p: thread-pool-1; w: 5)" "OUT(SV) Fragment(request_id=1211, client=192.0.2.2:51375, server=192.0.2.2:25700, more=true)"
[29/Aug/2014 09:31:36.102 +0900] "70(p: thread-pool-1; w: 5)" "OUT(SV) Fragment(request_id=1211, client=192.0.2.2:51375, server=192.0.2.2:25700, more=false)"

最大メッセージ分割サイズ算出方法

  1. request_id が同一のFragmentメッセージの数を数えます。
    上記の例ではrequest id=1211のFragmentメッセージが7回出力されています。

  2. 「最大メッセージ分割サイズ×(Fragmentメッセージの数)」から「最大メッセージ分割サイズ×(Fragmentメッセージの数+1)」の間がデータサイズになります。
    上記の例で最大メッセージ分割サイズが64000byteの場合、データサイズは64000byte×7(448000byte)~64000byte×8(512000byte)の間と判断できます。

最大受信バッファサイズの拡張について

最大受信バッファサイズは、接続先の送信データサイズより大きい値を指定する必要があります。最大メッセージ分割サイズの拡張時、接続先の送信データサイズが256000byteを超える場合がないか確認してください。
デフォルトの最大受信バッファサイズは256000byteですので、接続先の送信データサイズが256000byteを超える場合、最大受信バッファサイズを拡張してください。

最大受信バッファサイズの設定は、Java VMオプションで指定します。

最大受信バッファサイズはデータ受信時の設定であり、クライアントからのリクエスト受信時と、サーバーからのリプライ受信時に有効な機能になります。

プロパティ名

com.sun.corba.ee.transport.ORBMaximumReadByteBufferSize

設定値

256000~2147483647(byte)

デフォルト値

256000

設定方法
  • スタンドアロンクライアントの場合

    Java VMオプションに設定します。

    -Dcom.sun.corba.ee.transport.ORBMaximumReadByteBufferSize=設定値
  • アプリケーションクライアントコンテナに設定する場合

    環境変数VMARGSに設定します。

  • GlassFish Serverクラスターに設定する場合

    asadminコマンドを使用してJava VMオプションに設定します。詳細については、「JVMオプション」を参照してください。
    設定変更時は、GlassFish Serverクラスターを再起動する必要があります。

    -Dcom.sun.corba.ee.transport.ORBMaximumReadByteBufferSize=設定値

接続先から受信したデータは、受信バッファに格納されます。受信バッファのサイズは、受信するデータサイズにより、インストール直後の値64000byteから、最大受信バッファサイズの設定値まで、2倍ずつ(64000→128000→256000)拡張されます。

受信するデータサイズが、最大受信バッファサイズを超過した場合、データ受信処理は失敗し、以下の警告メッセージが通知されます。

本警告メッセージが通知された場合は、接続先の送信データサイズが最大受信バッファサイズより小さくなるようにチューニングしてください。

Windowsにおける処理遅延について

オペレーションシステムの仕様(KB2020447)により、以下の条件でデータ送受信中に5秒間の処理遅延が発生する場合があります。

本現象を回避するためには、以下の対処を行ってください。