アプリケーションのパフォーマンスを向上させるための実用的な戦略では、実行時間の大部分を占めるアプリケーションの領域を識別する必要があります。最も深刻な問題を最適化することによって、アプリケーションの総合的なパフォーマンスを大幅に改善できます。
JRun には、サーブレット内の個々のメソッドのパフォーマンスを測定するためのメソッドタイミング機能が用意されています。作成したメソッドだけでなく、EJB、サードパーティライブラリ、およびヘルパクラスのメソッドの実行時間も測定できます。
SERVER-INF/jrun.xml ファイルの InstrumentationService でタイミング パラメータの値を指定することによって、メソッドタイミングがアプリケーションをどのように監視するかを設定します。
メソッドタイミング機能には、2 つのメソッドタイミングが用意されています。
メソッドにおけるパフォーマンスの問題を検出するための一般的な戦略では、メソッドタイミングに別の設定を使用して、アプリケーションを 2 度実行します。
たとえば、サーブレットの doGet
メソッドは他のメソッドを呼び出します。
public void doGet {
... ...xyz()... ... }
doGet
メソッドの現在のメソッドタイミングはメソッドの実行所要時間を生成します。この実行時間には、xyz
の所要時間も含まれます。メソッド呼び出しタイミングは、メソッド xyz
の実行所要時間を生成します。この結果は、実行時間が主に doGet
メソッド内にあるか、または特にメソッド xyz
にあるかを示します。
メソッドタイミングは、jrun.xml ファイルで定義する MethodInstrumentor
サービスを使用して制御します。このサービスを使用して、次の項目を指定できます。
excludeCallsTo
属性で制御します。デフォルトでは、java.*
、javax.*
、および sun.*
パッケージのメソッドはタイミングを計測できません。
className
属性で制御します。directSubclasses
属性で制御します。この設定は、javax.servlet.http.HttpServlet
などのクラスには有効です。一般に、このクラスを拡張してサーブレットを定義します。instrumentMethods
属性で制御します。instrumentMethod
属性で制御します。instrumentMethod
属性の行を必要な数だけ使用してメソッド名を指定します。すべてのメソッドのタイミングを計測するには、アスタリスク (*) を指定します。instrumentCalls
属性で制御します。instrumentCallsTo
属性で制御します。instrumentCallsTo
属性の行を必要な数だけ使用してメソッド名を指定します。すべてのメソッド呼び出しのタイミングを計測するには、アスタリスク (*) を指定します。outputToStandardLogger
および outputToRequestThread
JRun ロガーは、パフォーマンス出力を処理します。デフォルトでは、JRun はログファイルに出力を書き込みますが、jrun.xml ファイルの LoggerService メカニズムを設定することで、クライアントまたは別のファイルに出力を書き込むように指示することもできます。
JRun には、InstrumentationService で Web 出力を定義するメソッドの実行時間に関する統計を収集する JRunTimingFilter という機能があります。JRunTimingFilter は、
JRunStatistics サーブレットを呼び出し、タイミング情報を表示するターゲットリソースの一番下にテーブルを作成します。
次の行は、default-web.xml ファイル内の JRunTimingFilter の定義を示しています。
<filter>
<filter-name>JRunTimingFilter</filter-name> <filter-class>jrun.servlet.filters.TimingFilter</filter-class> </filter> <filter-mapping> <filter-name>JRunTimingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
デフォルトでは url-pattern
のマッピングが /*
なので、JRunTimingFilter は、有効にするとリクエストごとに呼び出されます。
次の表のように、JRunTimingFilter には 2 つの初期化パラメータがあります。
デフォルトでは、JRunTimingFilter は無効になっています。フィルタの定義およびマッピングを有効にするには、これらのコメントを解除する必要があります。
次の行は、default-web.xml ファイル内の JRunStatistics サーブレットの定義を示しています。この設定は編集しないでください。
<servlet>
<servlet-name>JRunStatistics</servlet-name> <jsp-file>/jrunx/instrument/Results.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>JRunStatistics</servlet-name> <url-pattern>/JRunStatistics</url-pattern> </servlet-mapping>
JRun では、JRunTimingFilter を有効にすると、次の例に示すように、ページの実行までの時間と InstrumentationService で処理するメソッドがページの一番下に挿入されます。
InstrumentationService の設定の詳細については、弟 9 章、「メソッドタイミングの設定」を参照してください。
タイミングを計測するメソッドが呼び出されるたびに、JRun は出力先に 2 つのメッセージを送信します。最初のメッセージには、識別情報、そのメソッドタイミングの開始を示すテキスト、およびメソッドの開始時間が記載されます。2 番めのメッセージには、同じ識別情報とメソッドタイミングの終了を示すテキストのほかに、メソッドの終了時間および経過時間 (ミリ秒) が記載されます。
現在のメソッド呼び出しに関するメッセージの形式には、次のコンポーネントが含まれます。
currentTimeMillis, loglevel, type, className, hashCode, methodName, methodType, elapsed
doGet
メソッドの開始または終了によって生成されるタイミングメッセージの例を次に示します。
01/13 10:57:37 info METHOD ENTER SimpleServlet 7126423 doGet(javax.servlet.http.HttpServletRequest,javax.servlet.htt p.HttpServletResponse) 11
01/13 10:57:37 info METHOD EXIT SimpleServlet 7126423 doGet(javax.servlet.http.HttpServletRequest,javax.servlet.htt p.HttpServletResponse) 25 0
呼び出されたメソッド呼び出しメッセージの形式には、次のコンポーネントが含まれています。
currentTime loglevel type,className hashCode,methodName,
methodType,callClassName,callMethodName,callMethodType,line,elapsed
このメッセージの形式には、現在のメソッド呼び出しメッセージのすべてのコンポーネントと次の追加コンポーネントが含まれます。追加コンポーネントは太字で示されています。
次のセクションでは、メソッドタイミングの使用例について説明します。
jrun.xml ファイルのデフォルトのメソッドタイミング設定はサーブレットに対して有効に機能します。
instrumentMethods
属性を true に設定します。
EJB タイミングを有効にするには、jrun.xml ファイルに次の変更を行う必要があります。
className
属性 (javax.ejb.SessionBean
など) を追加します。
instrumentMethods
および instrumentCalls
属性を使用してタイミング機能を有効にします。instrumentMethod
および instrumentCallsTo
属性を使用して、タイミングを計測するメソッドおよび呼び出されたメソッドを指定します。JRun メソッドタイミング機能を使用して、JRun クラスローダーによって処理される任意のクラスのタイミングを計測できます。その中には、サーブレット、JSP、EJB、ヘルパークラス、および JavaBeans が含まれます。JavaBean などのクラスのメソッドタイミングを有効にするには、jrun.xml ファイルに次の変更を行う必要があります。
className
属性 (helpers.DataObject
など) をinstrumentMethods
および instrumentCalls
属性を使用してタイミング機能をinstrumentMethod
および instrumentCallsTo
属性を使用して、タイミングを