ページの先頭行へ戻る
Interstage Application Server V13.0.0 GlassFish 設計・構築・運用ガイド
FUJITSU Software

6.11.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:30700, 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:30700, 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:30700, 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:30700, 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:30700, 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:30700, 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:30700, 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に設定します。詳細については、「4.9.1 Jakarta EEアプリケーションクライアントの環境設定」を参照してください。

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

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

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

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

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

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

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

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

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