メソッドタイミング機能の使用

アプリケーションのパフォーマンスを向上させるための実用的な戦略では、実行時間の大部分を占めるアプリケーションの領域を識別する必要があります。最も深刻な問題を最適化することによって、アプリケーションの総合的なパフォーマンスを大幅に改善できます。

JRun には、サーブレット内の個々のメソッドのパフォーマンスを測定するためのメソッドタイミング機能が用意されています。作成したメソッドだけでなく、EJB、サードパーティライブラリ、およびヘルパクラスのメソッドの実行時間も測定できます。

メソッドタイミングの機能

SERVER-INF/jrun.xml ファイルの InstrumentationService でタイミング パラメータの値を指定することによって、メソッドタイミングがアプリケーションをどのように監視するかを設定します。

メソッドタイミング機能には、2 つのメソッドタイミングが用意されています。

メソッドにおけるパフォーマンスの問題を検出するための一般的な戦略では、メソッドタイミングに別の設定を使用して、アプリケーションを 2 度実行します。

たとえば、サーブレットの doGet メソッドは他のメソッドを呼び出します。

public void doGet {
...
  ...xyz()...
...
}

doGet メソッドの現在のメソッドタイミングはメソッドの実行所要時間を生成します。この実行時間には、xyz の所要時間も含まれます。メソッド呼び出しタイミングは、メソッド xyz の実行所要時間を生成します。この結果は、実行時間が主に doGet メソッド内にあるか、または特にメソッド xyz にあるかを示します。

メソッドタイミングの設定

メソッドタイミングは、jrun.xml ファイルで定義する MethodInstrumentor サービスを使用して制御します。このサービスを使用して、次の項目を指定できます。

計測の詳細のプリント

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 つの初期化パラメータがあります。
初期化パラメータ
説明
statsPage
レスポンス後にインクルードする統計ページの名前を定義します。デフォルトは /JRunStatistics です。
mimeTypes
JRun により JRunTimingFilter で適用されるレスポンス MIME
タイプのカンマ区切りリストを定義します。MIME タイプの最後には、ワイルドカード (*) が 1 つずつあります。デフォルトは text/* です。

デフォルトでは、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

次の表で、これらの値について説明します。
説明
currentTimeMillis
メッセージの日付と時刻。時刻はミリ秒単位で記録されます。
loglevel
タイミングメッセージのレベル。info、warning、error、または debug。
type
メソッドの開始または終了を表す文字列。
className
メソッドが含まれているクラスの名前。
hashCode
ハッシュコードは、マルチスレッド環境で役に立つ、固有オブジェクトリファレンスです。2 つのスレッドが同じサーブレットで同時に機能している場合、メソッドタイミングメッセージはインターリーブされます。このため、ハッシュコードを使用すると、
メッセージを区別できます。
methodName
メソッドの名前
methodType
void を示す V など、戻り値のタイプを含むメソッドの署名。
elapsed
メソッド呼び出しのミリ秒単位の経過時間 (EXIT メソッドのみ)。

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

このメッセージの形式には、現在のメソッド呼び出しメッセージのすべてのコンポーネントと次の追加コンポーネントが含まれます。追加コンポーネントは太字で示されています。

その他の値については次の表で説明します。
説明
callClassName
タイミングを計測するメソッドのクラス名
callMethodName
現在のメソッドによって呼び出された、呼び出されたメソッドの名前 (methodName)
callMethodType
呼び出されたメソッドの署名 (callMethodName)
line
呼び出されたメソッド (callMethodName) を含む、メソッド (methodName) のステートメントの行番号

次のセクションでは、メソッドタイミングの使用例について説明します。

メソッドタイミングのデフォルト設定の有効化

jrun.xml ファイルのデフォルトのメソッドタイミング設定はサーブレットに対して有効に機能します。

現在のメソッドタイミングを有効にするには

  1. instrumentMethods 属性を true に設定します。
  2. 1 つ以上のサーブレットを実行します。
  3. JRun サーバのログファイルを表示します。

EJB タイミング設定の有効化

EJB タイミングを有効にするには、jrun.xml ファイルに次の変更を行う必要があります。

その他のクラスの設定の有効化

JRun メソッドタイミング機能を使用して、JRun クラスローダーによって処理される任意のクラスのタイミングを計測できます。その中には、サーブレット、JSP、EJB、ヘルパークラス、および JavaBeans が含まれます。JavaBean などのクラスのメソッドタイミングを有効にするには、jrun.xml ファイルに次の変更を行う必要があります。