本連載は、Javaアプリケーション・サーバの1つである、IBM WebSphere Application Server(以下、WAS)についてのパフォーマンス・チューニングに関する入門記事です。チューニングといっても、実施するエンジニアによって、その方法は異なりますが、本連載はWASを前提とし、かつ80%のケースをカバーすることを目標とします(編集部注:WASのインストールから学びたい読者は、「バージョン別セットアップマニュアル一覧」のWebSphere Application Serverを参照してください)
前回は、データベース(以下、DB)との連携を行う場合のチューニング・ポイントについて解説しました。連載5回目は、DBとの連携を行う場合にも関係するEJB(Enterprise JavaBeans)についてやトランザクションについてのパフォーマンス・チューニングを解説します。「自分がかかわったEJBシステムが遅い!」とお嘆きの方はぜひ参考にしてください。
編集部注:EJBについて詳しく知りたい読者は、@IT Java Solutuionのカテゴリ「EJB/仮想化/分散技術」をご参照ください。
EJBのチューニングには、WebSphere Application Server(以下、WAS)のサーバ自体に対して実施するパフォーマンス・チューニング設定とEJBアプリケーションのデプロイメント・ディスクリプタ(配置記述子)に対する設定の2つがあります。
今回は、WASサーバ自体に対して実施するEJBパフォーマンス・チューニング設定を解説します。EJBアプリケーションのデプロイメント・ディスクリプタの設定調整については、次回で取り上げる予定です。
WASサーバの設定としては、3つのコンポーネント(ORB、EJBコンテナ、パーシステンス(永続化)・マネージャ)に対してチューニングを実施します。
編集部注:ORBについて詳しく知りたい読者は、@IT Insider's Computer Dictionaryの[CORBA (Common Object Request Broker Architecture)]をご参照ください
【1】ORBのチューニング
1つ目のORB(Object Request Broker)に対する調整を説明します。チューニング項目としては、以下の3つなどがあります。
- 参照による受け渡し(Pass by Reference)
- スレッド・プール
- データ・フラグメント・サイズ
1.参照による受け渡し(Pass by Reference)
連載第2回の「WAS高速化のための主要12項目」の4番目に挙げた項目です。パラメータを「参照による受け渡し(Pass by Reference)」に設定することにより、オブジェクト・コピー作成を省略し性能向上が期待できます。デフォルト設定は、「値による受け渡し(Pass by Value)」になっています。
EJBクライアントとEJBが同じクラスローダーを使用している場合に、このオプションを使用できます。いい換えれば、EJBクライアントとEJBが同じEARファイルに含まれてデプロイされている必要があります。
これは、端的にいうと、EJBクライアントとEJBが同じWASインスタンス(同一のJVMに導入されているということです。この「参照による受け渡し(Pass by Reference)」オプションは、受け渡されるパラメータが非プリミティブ・オブジェクトタイプの場合にのみ、パフォーマンス向上が期待できます。
「int」や「float」といったプリミティブ・オブジェクトの場合は、常にコピーが行われるために性能向上に対する効果は期待できません。管理コンソールから、「参照による受け渡し」チェックボックスを選択するか、汎用JVM引数に「-D com.ibm.CORBA.iiop.noLocalCopies=true」を指定することで設定できます。
(2)ORBのスレッド・プールのチューニング
デフォルトのサイズは、最小10スレッド、最大50スレッドです。筆者の経験としては、最大スレット数がデフォルト値よりも小さく設定しても十分な場合が多いです。アプリケーションや環境に依存しますので、TPV(Tivoli Performance Viewer)を使ってプール・サイズの調整を行い、性能テストを繰り返し調整することが必要です。10スレッドぐらいからテストを行うといいでしょう。
編集部注:TPVについて詳しく知りたい読者は、連載第1回の「『PMI』および『TPV』で詳細な情報を入手」をご参照ください
なお、「最大スレッド・サイズを超えたスレッド割り振りを許可」(無制限な拡張)の指定はお勧めしません。設定は、管理コンソールから行います。図1の「スレッド・プール設定」で選択したスレッド・プールに対して設定を行います。図2では、「ORB.thread.pool」を指定しているので、以下では「ORB.thread.pool」に対する設定を例示します。
図2 ORBスレッド・プールサイズの設定(ORB.thread.pool)
(3)データ・フラグメント・サイズ
EJBクライアントとEJBとがリモート接続する場合のEJBからEJBクライアントへの返信メッセージの1リターンパケット当たりのデータのチャンク・サイズを調整できます。
リターンデータのサイズが1024bytes以上の場合に、サイズ拡張を行うことにより、データパケットのフラグメント(断片化)を防ぎ、パフォーマンス向上が期待できます。管理コンソールから、汎用JVM引数に「-D com.ibm.CORBA.FragmentSize=2048」というような指定を行うことで調整可能です。
Copyright © ITmedia, Inc. All Rights Reserved.