JSPページの処理時間を計測するJavaTips 〜JSP/サーブレット編

» 2004年10月19日 10時00分 公開
[山田祥寛@IT]

 「Javaプログラムの実行時間を計測する」では、Javaアプリケーション(サーブレットクラスやJavaBeansなどを含む)内のある特定の処理に要した時間を計測する方法について紹介しました。この方法は、JSPページ内でもスクリプトレット(または式)を利用することで同じように活用できますが、処理時間を計測するためだけにいちいちスクリプトレットを埋め込む必要があり、面倒です。

 そこで、本TIPSではJSPページの処理時間を計測するのに利用できるタグライブラリ「Benchmark」を紹介します。Benchmarkタグライブラリを使用することで、対象のコードをアクションタグで囲むだけで、該当部分の処理時間を計測することが可能になります。うまく利用して、JSPページのパフォーマンス・チューニングに役立ててみてください。

解説

(1)Benchmarkタグライブラリをインストールする

 Benchmarkタグライブラリは、Jakarta Taglibsサブプロジェクトから提供されているカスタムタグライブラリです。利用に当たっては、必要な「.jar」「.tld」ファイルの配置とデプロイメント・ディスクリプタへの定義が必要となります。まずはBenchmarkタグライブラリのモジュールを以下のサイトからダウンロードしましょう。

http://jakarta.apache.org/taglibs/

 ダウンロードファイルを解凍したフォルダ配下に含まれるtaglibs-benchmark.tldをアプリケーションルート配下の「/WEB-INF」フォルダに、taglibs-benchmark.jarを同じく「/WEB-INF/lib」フォルダに、それぞれ展開してください。

 また、デプロイメント・ディスクリプタに以下の記述を追加します。

web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
  version="2.4">
  …中略…
  <jsp-config>
    <taglib>
      <taglib-uri>http://jakarta.apache.org/taglibs/benchmark-1.0</taglib-uri>
      <taglib-location>/WEB-INF/tablibs-benchmark.tld</taglib-location>
    </taglib>

    …中略…
    </jsp-config>
</web-app>


(2)処理時間を計測するためのJSPページを作成する

 benchmark.jspを例に、Benchmarkタグライブラリの利用方法を見てみることにしましょう。Benchmarkタグライブラリには、<benchmark:duration>タグ、そして、<benchmark:exclude>タグが用意されています。

benchmark.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib uri="http://jakarta.apache.org/taglibs/benchmark-1.0"
           prefix="benchmark" %>
<benchmark:duration repeat="2" output="false">
  <% Thread.sleep(1000); %>
  <benchmark:exclude>
    <% Thread.sleep(1000); %>
  </benchmark:exclude>
</benchmark:duration>ミリ秒


 実行結果は、環境によって微妙に異なりますが、著者の環境では2003ミリ秒と表示されました。<benchmark:duration>タグは、配下の処理を実行し、その実行時間をミリ秒換算で返します。その際、repeat属性で配下の処理を何回繰り返すか、output属性で配下の処理結果を出力するかどうかをそれぞれ指定することができます。処理の一部を計測の対象外にしたい場合には、<benchmark:exclude>タグで囲みます。

 ここでは、2つのThread#sleepメソッドで処理を1000+1000ミリ秒間だけスリープしていますが、片方のsleepメソッドが<benchmark:exclude>タグで計測除外されていますので、実行1回につき、かかる実行時間は1000ミリ秒強(オーバーヘッドの分を含め)ということになります。そして、repeat属性は2で2回処理を繰り返していますので、結果は2000ミリ秒強という結果になるわけです。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。