IBM TechXchange Japan WebSphere User Group (日本WebSphereユーザーグループ)

IBM TechXchange Japan WebSphere User Group (日本WebSphereユーザーグループ)

 View Only

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

Sun February 20, 2022 01:25 AM

転載者注:以下の内容は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バイト毎に分割して送信されます。パフォーマンス・チューニングのためにメッセージ・サイズや分割されているかどうかを確認したい時があります。この記事では、その方法とフラグメント・サイズの調整の仕方をご紹介いたします。

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

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

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

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

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

    図5 汎用JVM引数

トレース設定の考慮事項

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

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

→ WAS 小ワザ集:目次ページにもどる

Statistics
0 Favorited
5 Views
0 Files
0 Shares
0 Downloads