読者です 読者をやめる 読者になる 読者になる

Webアプリのプロファイリング

Java

WTP & Eclipse Profiler を利用して、Webアプリのプロファイリングをやってみた。


Webアプリのプロファイリングは、Tomcatプロセス(ターゲットプロセス)、およびそのTomcatプロセスに接続してプロファイル情報を取得するプロセス(リモートプロセス)の2つのプロセスを利用して行う。


事前準備

まずは、プロファイリングの設定を行う前に、Tomcat および Sysdeo Eclipse Tomcat Launcher plugin のインストールを済ませておいてください。


Eclipse Profiler のインストール

Eclipse Profiler プラグインのインストール。Eclipse Profiler のサイトからダウンロードしてきて、plugins フォルダに解凍する。
ただし、Ver.0.5.33 は Eclipse 3.1.x で動作しないので、パッチを当てる必要あり。パッチのサイトから profiler_jars.part1〜4.rar をダウンロードして、profiler_trace.jar/profiler_ui.jar を取得。先ほど解凍して得られた ru.nlmk.eclipse.plugins.profiler 内の jar ファイルを上書きする。
こうしておかないと、リモートプロセスの起動時に失敗する。


さらに、ru.nlmk.eclipse.plugins.profiler 内の ProfilerDLL.dll を、JREのインストールフォルダの bin 配下にコピーする。


ターゲットプロセスの設定

さて、いよいよプロファイリングの設定開始。
Eclipse のメニューから「ウィンドウ」→「設定」→「JVMの設定」を開き、以下のようにパラメータを設定する。

  • JVMパラメータの追加
    • -XrunProfilerDLL:1 -D__PROFILER_USE_PACKAGE_FILTER=1 -D__PROFILER_TIMING_METHOD=1 -D__PROFILER_PACKAGE_FILTER=__M__sun.;__M__com.sun.;__M__java.;__M__javax.;__M__org.apache.
  • クラスパス
    • そのまま(何も設定していない)
  • ブートクラスパス
    • rt.jar/plugin.jar/jsse.jar/jce.jar/javaws.jar/deploy.jar/charsets.jar(JREのインストール先のlibから追加する)
    • profiler_trace.jar/jakarta-regexp.jar/commons-lang.jar(Eclipse Profiler のインストール先から追加する)


JREの jar ファイルは全ては不要かもしんないけど、rt.jar だけだと、S2を起動したときに以下のようなエラーが発生する。試しに、JREのlib以下の全部の jar をクラスパスに含めたらうまくいったので上のような設定を行っている。面倒くさがりでごめんなさい(-_-;)

Caused by: java.io.UnsupportedEncodingException: SJIS
    at sun.io.Converters.getConverterClass(Unknown Source)
    at sun.io.Converters.newConverter(Unknown Source)
    at sun.io.ByteToCharConverter.getConverter(Unknown Source)
    at sun.nio.cs.StreamDecoder$ConverterSD.(Unknown Source)

そうしたら、ランチャーを利用してTomcatを起動。Eclipseデバッグパースペクティブで、Tomcatのスレッドが以下のようになっていたらOK。Profiler Sender Thread が動いているのが確認できる。

ローカル・ホスト上の org.apache.catalina.startup.Bootstrap:3278
    スレッド [main] (実行中)
    スレッド [Profiler Sender Thread] (実行中)
    スレッド [Thread-1] (実行中)
    スレッド [ContainerBackgroundProcessor[StandardEngine[Catalina]]] (実行中)

リモートプロセスの設定

次はリモートプロセスの設定。
Eclipse のメニューから「実行」→「構成および実行」と開くと、「Remoto Profiler」という項目があるはず。それを選択して「新規」ボタンを押下すると、新しい構成が作成されるので、以下のように設定する。

  • 名前
    • Tomcat Profiler(任意です)
  • プロジェクト
  • ※その他はデフォルトのまま。


その画面で「実行」ボタンを押下すると、Eclipseデバッグパースペクティブで以下のようなプロセスが起動がる。

Tomcat Profiler [Remote Profiler]
    127.0.0.1:6743

プロファイリングの開始

これでプロファイリングを開始できる。
まず、「ウィンドウ」→「パースペクティブを開く」から、「Profiler」を選択して、プロファイル画面を表示させる。その上で、先ほど起動したリモートプロセスをデバッグビューで選択すると・・・プロファイル情報が表示されました!!


Eclipse Profiler