目次


WAS 小ワザ集

第12回:ORBメッセージ・サイズの確認とフラグメントの調整方法

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: WAS 小ワザ集

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:WAS 小ワザ集

このシリーズの続きに乞うご期待。

オブジェクト・リクエスト・ブローカー(Object Request Broker、ORB、分散オブジェクト間通信機構)は、Internet InterORB Protocol (IIOP) を使用して、クライアントとサーバー間のプログラムの対話を管理しています。WASでは、リモートEJBやWebSphere eXtreme Scaleの呼び出しにORBを利用しています。ORBでは大きなメッセージをいくつかのフラグメント(断片)に分割して送信しています。

WAS V8.0のデフォルトのフラグメント・サイズは、1024バイトです。つまり、大きなメッセージはデフォルトでは1024バイト毎に分割して送信されます。パフォーマンス・チューニングのためにメッセージ・サイズや分割されているかどうかを確認したい時があります。この記事では、その方法とフラグメント・サイズの調整の仕方をご紹介いたします。

ORBメッセージ・サイズをトレースに出力

リモートEJBの呼び出し側のサーバーでトレースを出力してみましょう。

  1. 管理コンソールの右のメニューで「サーバー|サーバー・タイプ」を展開し、「WebSphere Application Server」を選択し、次にアプリケーション・サーバーをクリックします。
  2. サーバーの構成の画面で、「コンテナー・サービス」を展開し、「ORBサービス」をクリックします。
    図1 サーバー構成
    図1 サーバー構成
    図1 サーバー構成
  3. 「ORBサービス」の構成で、「ORBトレース」を選択します。「OK」をクリックして構成を保存します。
    図2 ORBサービスのORBトレースを選択
    図2 ORBサービスのORBトレースを選択
    図2 ORBサービスのORBトレースを選択
  4. 「トラブルシューティング」の「ログおよびトレース」を選択し、ORBトレースを設定したサーバーをクリックします。
  5. 「ロギングおよびトレース > server名」の画面で、「診断トレース」をクリックします。「診断トレース・サービス」で、「トレース出力」の「ファイル」を選択し、「OK」をクリックし保存します。ファイルのサイズは必要に応じて変更してください。
    図3 トレースの出力
    図3 トレースの出力
    図3 トレースの出力
  6. 再度、サーバー名を選択して、「ログ詳細レベルの変更」をクリックし、「ログ詳細レベルの変更」に「ORBRas=all」を指定します。「OK」をクリックして保存します。
    図4 ログ詳細レベルに ORBRas=allを指定
    図4 ログ詳細レベルに ORBRas=allを指定
    図4 ログ詳細レベルに ORBRas=allを指定
  7. WASを再起動し、リモートEJBをコールするサーブレットを実行してみます。
  8. 5で指定したトレース・ファイルを開きます。

    ORBサイズを得るには、以下の項目を確認します。
    • Fragment to follow
    • Message size
    • Request ID

特定の呼び出しのメッセージ・サイズを確認したい場合は、メソッド名やメッセージ内容から要求を特定します。この時、Fragment to followが、YesかNoを確認し、Noならメッセージ・サイズがそのまま大きさを表しています。Yesの場合は、メッセージが分割して送受信されているので、リクエストIDが同じメッセージ・サイズを洗い出して合計する必要があります。
IBM JDKでは、GIOP1.2のフラグメンテーションの管理を利用するために次のプロパティが利用できます。デフォルトは、1024バイトです。0 をセットするとフラグメントの機能は停止されます。
com.ibm.CORBA.FragmentSize=サイズ(単位 バイト)
フラグメントが発生しているかどうかをチェックする場合は、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 JST
Thread Info:   WebContainer : 0 ........ サーブレットが実行されたスレッド
Local Port:    2992 (0xBB0)   .......... 呼び出し側のポート
Local IP:      9.68.171.145    ......... IPアドレス
Remote Port:   2851 (0xB23)   .......... リモートEJB側のポート
Remote IP:     9.68.171.145
GIOP Version:  1.2
Byte order:    big endian
Fragment to follow: No   ............... No:メッセージが一つのフラグメントに含まれる
                                         Yes:メッセージが複数に分割して送られた
Message size:  636 (0x27C).............. メッセージ・サイズ 上の項目が、Noの場合はそのままがサイズ
                                         Yesの場合は、同じリクエストIDのサイズを合計します
--
Request ID:        42................... リクエストID
Response Flag:     WITH_TARGET
Target Address:     0
Object 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:       16f

0000: 47494F50 01020000 0000027C 0000002A   GIOP.......|...*
0010: 03000000 0000BDBD 0000008A 4A4D4249   ............JMBI
~ 渡したデータ

IN COMING: ............................. 受信
Reply Message .......................... 応答メッセージ
Date:          2011/12/01 13:44:17 JST
Thread 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.145
Remote Port:   2851 (0xB23)
Remote IP:     9.68.171.145
GIOP Version:  1.2
Byte order:    big endian
Fragment to follow: No   
Message size:  280 (0x118)
--
Request ID:        42................... リクエストID
Service 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   ........ ......8
0030: 524D493A 64656D6F 656A622E 44656D6F   RMI:demoejb.Demo
0040: 496E666F 533A3538 36394335 44313946   InfoS:5869C5D19F
 ~受け取ったデータ

フラグメント・サイズの調整

ORBフラグメント・サイズの調整は、ORBサービスのカスタム・プロパティかJVM引数に指定します。

  1. 「サーバー|サーバー・タイプ」を展開し、「アプリケーション・サーバー」> 「server_name 」>「コンテナー・サービス」>「ORB サービス」>「カスタム・プロパティー」の順でクリックします。
  2. 「新規」をクリックしてリストに新規プロパティーを追加します。

      名前:com.ibm.CORBA.FragmentSize
       値:2048

    このプロパティは、ORBメッセージのリクエストを送信する時に使用するサイズを指定します。ほとんどの送信データ・サイズが、1KBを越えている場合に調整を検討します。

    図6 ORBカスタム・プロパティの作成
    図6 ORBカスタム・プロパティの作成
    図6 ORBカスタム・プロパティの作成
  3. 「OK」をクリックして、さらに設定を保存します。
    図7 ORBカスタム・プロパティ
    図7 ORBカスタム・プロパティ
    図7 ORBカスタム・プロパティ

WASの場合、汎用JVM引数に次のように指定します。

  1. 「サーバー|サーバー・タイプ」の「WebSphere Application Server」を選択し、次にアプリケーション・サーバーをクリックします。
  2. サーバーの構成の画面で、サーバー・インフラストレクチャー「Javaおよびプロセス管理」を展開し、「プロセスの定義」をクリックします。
  3. 「Java仮想マシン」をクリックし、汎用JVM引数に次のような例を設定します。

    例 -D com.ibm.CORBA.FragmentSize=0

    図5 汎用JVM引数
    図5 汎用JVM引数
    図5 汎用JVM引数

トレース設定の考慮事項

トレースの設定は、設定だけでトレースを出力しなくても負荷を増加させます。

この記事の中で、サーバーのコンテナー・サービスのORBサービスに「ORBトレース」と「ログ詳細レベル」にORBRas=all を設定しました。トレース・ファイルを出力しなくても指定があると内部的にトレースのロジックが実行されます。メモリーの使用量も増え、処理速度も遅くなります。一度設定した後は、全ての設定を元に戻して再起動してください。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=781591
ArticleTitle=WAS 小ワザ集: 第12回:ORBメッセージ・サイズの確認とフラグメントの調整方法
publish-date=12262011