転載者注:以下の内容はWAS Fullプロファイル/WAS Traditionalランタイムについての情報です。
オリジナル文章公開日:2011年12月26日
オブジェクト・リクエスト・ブローカー(Object Request Broker、ORB、分散オブジェクト間通信機構)は、Internet InterORB Protocol (IIOP) を使用して、クライアントとサーバー間のプログラムの対話を管理しています。WASでは、リモートEJBやWebSphere eXtreme Scaleの呼び出しにORBを利用しています。ORBでは大きなメッセージをいくつかのフラグメント(断片)に分割して送信しています。
WAS V8.0のデフォルトのフラグメント・サイズは、1024バイトです。つまり、大きなメッセージはデフォルトでは1024バイト毎に分割して送信されます。パフォーマンス・チューニングのためにメッセージ・サイズや分割されているかどうかを確認したい時があります。この記事では、その方法とフラグメント・サイズの調整の仕方をご紹介いたします。
リモートEJBの呼び出し側のサーバーでトレースを出力してみましょう。
ORBRas=all
ORBサイズを得るには、以下の項目を確認します。
特定の呼び出しのメッセージ・サイズを確認したい場合は、メソッド名やメッセージ内容から要求を特定します。この時、Fragment to followが、YesかNoを確認し、Noならメッセージ・サイズがそのまま大きさを表しています。Yesの場合は、メッセージが分割して送受信されているので、リクエストIDが同じメッセージ・サイズを洗い出して合計する必要があります。
IBM JDKでは、GIOP1.2のフラグメンテーションの管理を利用するために次のプロパティが利用できます。デフォルトは、1024バイトです。0 をセットするとフラグメントの機能は停止されます。
com.ibm.CORBA.FragmentSize=サイズ(単位 バイト)
フラグメントが発生しているかどうかをチェックする場合は、Fragment to follow: Yesをトレース・ファイルから探します。フラグメントをなくすためには、合計メッセージのサイズより大きな値を指定します。
Fragment to follow: Yes
ORBトレースに出力される内容を説明します。
[11/12/01 13:44:17:312 JST] 00000028 ORBRas 3 com.ibm.rmi.ras.Trace dump:84 WebContainer : 0 OUT GOING:.............................. 送信Request Message......................... 要求メッセージDate: 2011/12/01 13:44:17 JSTThread Info: WebContainer : 0 ........ サーブレットが実行されたスレッドLocal Port: 2992 (0xBB0) .......... 呼び出し側のポートLocal IP: 9.68.171.145 ......... IPアドレスRemote Port: 2851 (0xB23) .......... リモートEJB側のポートRemote IP: 9.68.171.145GIOP Version: 1.2Byte order: big endianFragment to follow: No ............... No:メッセージが一つのフラグメントに含まれるYes:メッセージが複数に分割して送られたMessage size: 636 (0x27C).............. メッセージ・サイズ 上の項目が、Noの場合はそのままがサイズYesの場合は、同じリクエストIDのサイズを合計します--Request ID: 42................... リクエストIDResponse Flag: WITH_TARGETTarget Address: 0Object Key: length = 138 (0x8A)4A4D4249 00000012 2ED4FE89 33656633 ~Operation: callDemoInfoS........ 受信側オブジェクトが実行するオペレーション名(メソッド名)Service Context: length = 1 (0x1)..... サービスコンテキスト情報Context ID: 1229081865 (0x49424D09)Context data: length = 167 (0xA7)00000004 00000133 F7EC125D 03691E75~Data Offset: 16f0000: 47494F50 01020000 0000027C 0000002A GIOP.......|...*0010: 03000000 0000BDBD 0000008A 4A4D4249 ............JMBI~ 渡したデータIN COMING: ............................. 受信Reply Message .......................... 応答メッセージDate: 2011/12/01 13:44:17 JSTThread Info: RT=2:P=623390:O=0:WSTCPTransportConnection[addr=9.68.171.145,port=2851,local=2992]Local Port: 2992 (0xBB0)Local IP: 9.68.171.145Remote Port: 2851 (0xB23)Remote IP: 9.68.171.145GIOP Version: 1.2Byte order: big endianFragment to follow: No Message size: 280 (0x118)--Request ID: 42................... リクエストIDService Context: length = 1 (0x1)..... サービスコンテキスト情報Context ID: 1229081874 (0x49424D12)Context data: length = 8 (0x8)00BD0001 16000001 Reply Status: NO_EXCEPTION......... 受信された応答の状況0000: 47494F50 01020001 00000118 0000002A GIOP...........*0010: 00000000 00000001 49424D12 00000008 ........IBM.....0020: 00BD0001 16000001 7FFFFF02 00000038 ........ ......80030: 524D493A 64656D6F 656A622E 44656D6F RMI:demoejb.Demo0040: 496E666F 533A3538 36394335 44313946 InfoS:5869C5D19F ~受け取ったデータ
ORBフラグメント・サイズの調整は、ORBサービスのカスタム・プロパティかJVM引数に指定します。
名前:com.ibm.CORBA.FragmentSize値:2048
WASの場合、汎用JVM引数に次のように指定します。
トレースの設定は、設定だけでトレースを出力しなくても負荷を増加させます。
この記事の中で、サーバーのコンテナー・サービスのORBサービスに「ORBトレース」と「ログ詳細レベル」にORBRas=all を設定しました。トレース・ファイルを出力しなくても指定があると内部的にトレースのロジックが実行されます。メモリーの使用量も増え、処理速度も遅くなります。一度設定した後は、全ての設定を元に戻して再起動してください。
→ WAS 小ワザ集:目次ページにもどる