Sun ONE Application Server 7, Update 1 開発者ガイド |
J2EE アプリケーションのデバッグmoduleSun ONE Application Server 7 でアプリケーションをデバッグするためのガイドラインについて説明します。この章には次の節があります。
- デバッグの有効化
- JPDA オプション
- Sun ONE Studio を利用したデバッグ
- JSP のデバッグ
- デバッグ用スタックトレースの生成
- Sun ONE Message Queue のデバッグ
- ログ
- プロファイル
アプリケーションをデバッグするときは、説明しているとおりに、server.xml ファイルを編集する必要があります。moduleこのファイルの全般的な説明については、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。
デバッグの有効化
デバッグを有効化するときは、ローカルとリモートの両方でデバッグを有効化します。
次の方法のいずれかでデバッグを有効化できます。
Sun ONE Application Server のデバッグは、JPDA (Java Platform Debugger Architecture) に基づいています。詳細は、「JPDA オプション」を参照してください。
管理インタフェースの使用法
デバッグを有効にするには、次の手順に従います。
- サーバーインスタンスのページに移動します。
- 「一般」タブを選択します。
- 「デバッグモードで起動」ボックスにチェックマークをつけます。
- 「変更の適用」ボタンを選択します。
- サーバーを再起動します。
- 「一般」オプションの「JVM 設定」タブを選択します。
- 「デバッグオプション」フィールドの「address=port_number」に表示されるポート番号を書き留めます。デバッガを使用するときに、この番号が必要になります。
- JPDA オプションを追加するときは、次のオプション手順を実行します。
「デバッグオプション」に任意の JPDA デバッグオプションを追加します。「JPDA オプション」を参照してください。
server.xml ファイルの編集
デバッグを有効にするには、server.xml ファイル内の java-config 要素の次の属性を設定します。
- debug-enabled="true" に設定してデバッグを有効にする
- debug-options 属性に任意の JPDA デバッグオプションを追加する。「JPDA オプション」を参照してください。
- JVM とデバッガの接続に使用するポートを指定するときは、debug-options 属性の address=port_number に番号を指定する
server.xml ファイルの詳細については、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。
JPDA オプション
Sun ONE Application Server に用意されているデフォルトの JPDA オプションは次のとおりです。
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n
suspend=y に設定すると、JVM は、中断モードで起動し、デバッガが接続されるまで中断状態のままになります。これは、JVM が起動すると同時にデバッグを開始したい場合に便利です。
JVM とデバッガの接続に使用するポートを指定するには、address=port_number に番号を指定します。
追加のオプションを含めることもできます。JPDA デバッグオプションのリストは次のサイトで入手できます。
http://java.sun.com/products/jpda/doc/conninv.html#Invocation
Sun ONE Studio を利用したデバッグ
Sun ONE Application Server で Sun ONE Studio 4 デバッガを使用するには、次の手順に従います。
- Sun ONE Studio を起動し、デバッグするアプリケーションソースコードを含んでいるディレクトリをマウントします。
- 「実行時」タブを選択し、デバッグモード (ローカルまたはリモート) で起動する Sun ONE Application Server インスタンスを表示します。
- サーバーインスタンスを右クリックし、表示されるメニューから「状態」を選択します。「状態」ウィンドウが表示されます。
- サーバーインスタンスがデバッグモードで稼動していないときは、「サーバーインスタンスを停止」を選択してから「デバッグモードで起動」を選択します。
- サーバーインスタンスがデバッグモードで稼動しているときは、「状態」ウィンドウと状態行にポート番号 (port_number) が表示されます。このポート番号を書き留めます。
- 「デバッグ」メニューの「接続」オプションを選択します。
- 必要に応じて「コネクタ」テキストフィールドを「SocketAttach (ソケットでその他の VM に接続します。)」に変更します。
- 「ホスト」テキストボックスにアプリケーションサーバーのホスト名を入力します。
- 「ポート」テキストボックスにポート番号 (port_number) を入力し、「了解」を選択します。
これで、Sun ONE Studio を使って Java クラスをデバッグできるようになりました。
Sun ONE Studio を使ったアプリケーションのデバッグについてヘルプを参照するには、「ヘルプ」から「内容」を選択し、「Java プログラムのデバッグ」を選択します。Sun ONE Studio 4, Enterprise Edition for Java のチュートリアルも参考になります。
JSP のデバッグ
Sun ONE Studio 4 を使って JSP をデバッグする場合、JSP コードと生成されたサーブレットコードの両方にブレークポイントを設定し、これらの間で表示を切り替えて両方の同一ブレークポイントを見ることができます。
Sun ONE Studio でデバッグを設定するには、前の節を参照してください。詳細については、Sun ONE Studio 4, Enterprise Edition のチュートリアルを参照してください。
デバッグ用スタックトレースの生成
次のサイトで説明されているように、Java のデバッグ用スタックトレースを生成できます。
http://developer.java.sun.com/developer/technicalArticles/Programming/Stacktrace/
-Xrs フラグが (<jvm-options> の下にある) server.xml ファイル内に (信号の使用を減らすために) 設定されている場合、スタックトレースを生成する前にコメントアウトします。-Xrs フラグを使用すると、トレースを生成するための信号を送信するときに、サーバーでコアダンプが発生して再起動される場合があります。
スタックトレースは、server.xml 内の log-service 属性に基づいて、システムログファイルまたは stderr に移動します。
server.xml ファイルの詳細は、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。
Sun ONE Message Queue のデバッグ
Sun ONE Message Queue は、ブローカロガーを持っているため、JMS アプリケーション (メッセージ駆動型 Bean を含む) のデバッグに役立ちます。ロガーの冗長性を調節したり、ブローカの -tty オプションを使ってロガー出力をコンソールに送信することができます。詳細は、『Sun ONE Message Queue 管理者ガイド』を参照してください。
ログ
Sun ONE Application Server のログファイルを使うとアプリケーションのデバッグに役立つことがあります。ログについての全般的な情報については、『Sun ONE Application Server 管理者ガイド』を参照してください。server.xml ファイルでのログ設定の詳細は、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。
次の方法のいずれかでログの設定を変更できます。
管理インタフェースの使用法
ログの設定を変更するには、次の手順に従います。
- サーバーインスタンスのページに移動します。
- 「一般」オプションの「ログ」タブを選択します。
- ログファイルだけでなく、クライアントにも例外を送るには、「標準エラー出力にエコー」ボックスにチェックマークをつけます。
- コンソールを表示するときは、「コンソールを作成」ボックスにチェックマークをつけます (これは Windows 環境専用のオプションです)。
- 「Save」ボタンを選択します。
- サーバーを再起動します。
server.xml ファイルの編集
ログの設定を変更するには、server.xml ファイル内の log-service 要素の属性を設定します。
ログファイルだけでなく、クライアントにも例外を送ることができます。server.xml 内に次のパラメータを設定します。クライアントがブラウザの場合、例外はブラウザに表示されます。
<log-service ... echo-log-messages-to-stderr=true ... / />
Windows 環境では、server.xml ファイルに次の行を追加して、コンソールを表示できます。
<log-service ... create-console=true ... / />
server.xml ファイルの詳細については、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。
プロファイル
プロファイラを使って Sun ONE Application Server 上でリモートプロファイルを実行すると、サーバー側のパフォーマンスのボトルネックを検出できます。この節では、Sun ONE Application Server で使用できるように、これらのプロファイラを設定する方法について説明します。
HPROF プロファイラ
HPROF は、Java 2 SDK に付属している簡単なプロファイラエージェントです。これは、JVMPI と対話して、ファイルまたはソケットに、ASCII またはバイナリ形式でプロファイル情報を書き出すダイナミックリンクライブラリです。この情報は、HAT などのプロファイラフロントエンドツールを使ってさらに処理することができます。
HPROF は、CPU の使用状況、ヒープ割り当て統計、およびモニター競合プロファイルを表示できます。さらに、Java 仮想マシン内のヒープダンプ、およびすべてのモニターとスレッドの状態もレポートします。HPROF プロファイラの詳細は、次のサイトにある JDK のマニュアルを参照してください。
http://java.sun.com/j2se/1.4/docs/guide/jvmpi/jvmpi.html#hprof
次の手順に従って HPROF がインストールされると、ライブラリがサーバープロセス内に読み込まれます。
UNIX 上で HPROF プロファイルを使うには、次の手順で行います。
- 次の方法のいずれかで Sun ONE Application Server を設定します。
管理インタフェースのサーバーインスタンスページに行き、「JVM 設定」タブを選択し、「プロファイラ」オプションを選択してから次のフィールドを編集し、「保存」を選択する
「JVM オプション」: 次の各オプションを使用するには、「JVM オプション」フィールドにオプションを入力し、「追加」を選択してから、「JVM オプション」リストで該当するボックスにチェックマークをつける
-Xrunhprof:file=log.txt,options
<!-- hprof オプション -->
<profiler name="hprof" enabled="true">
<jvm-options>
-Xrunhprof:file=log.txt,options
</jvm-options>
</profiler>
注 -Xrs フラグは使用しないでください。
次に、使用できる options の例を示します。
-Xrunhprof:file=log.txt,thread=y,depth=3
file オプションは、手順 6 のスタックダンプの書き出し先を決定するので重要です。
HPROF オプションの構文は次のとおりです。
-Xrunhprof[:help]|[:option=value,option2=value2, ...]
help を使うと、HPROF に渡すことができるオプションが表示されます。出力は次のとおりです。
Hprof usage: -Xrunhprof[:help]|[:<option>=<value>, ...]
Option Name and Value Description Default
--------------------- ----------- -------
heap=dump|sites|all heap profiling all
cpu=samples|old CPU usage off
format=a|b ascii or binary output a
file=<file> write data to file java.hprof
(.txt for ascii)
net=<host>:<port> send data over a socket write to file
depth=<size> stack trace depth 4
cutoff=<value> output cutoff point 0.0001
lineno=y|n line number in traces? y
thread=y|n thread in traces? n
doe=y|n dump on exit? y
注 JDK 1.4 では、cpu オプションと monitor オプションは機能しません。
- Sun ONE Application Server の起動スクリプトの行を変更する必要もあります。起動スクリプトファイルは、instance_dir/startserv にあります。次の行を変更します。
PRODUCT_BIN=appservd-wdog
これを次のように変更します。
PRODUCT_BIN=appservd
- 起動スクリプトを実行してサーバーを起動します。サーバーは (手順 2 で変更したとおり) フォアグラウンドで稼動しているため、コマンドプロンプトは、サーバーが停止した後にのみ戻ります。
- 別のウィンドウまたは端末で、サーバープロセスのプロセス ID を見つけます。
% ps -ef | grep appservd
このコマンドは、2 つ以上の appservd プロセスをリストします。PPID (親プロセス ID) 列を見て、2 つのプロセスのうちどちらが親でどちらが子かを確認します。子のプロセス ID は PID (プロセス ID) であることに注意してください。
- SIGQUIT シグナル (シグナル 3) を子のプロセスに送信します。
% kill -QUIT child_PID
- Application Server を停止するには、別のウィンドウから停止スクリプトを実行します。
% ./stopserv
これにより、手順 1 で file HPROF オプションを使って指定したファイルに HPROF スタックダンプが書き出されます。スタックダンプの使い方については、「デバッグ用スタックトレースの生成」を参照してください。
- Application Server を元の設定に戻すには、手順 1 と 2 の変更を元に戻します。
Optimizeit プロファイラ
Intuitive Systems 社の OptimizeitTM 4.2 は、次のサイトで購入できます。
http://www.optimizeit.com/index.html
次の手順に従って Optimizeit をインストールすると、そのライブラリがサーバープロセス内に読み込まれます。
Optimizeit を使用したリモートプロファイルを有効にするには、次のいずれかを実行します。
- 管理インタフェースのサーバーインスタンスページに行き、「JVM 設定」タブを選択し、「プロファイラ」オプションを選択してから次のフィールドを編集し、「保存」を選択する
「クラスパス」: Optimizeit_dir/lib/optit.jar
「ネイティブライブラリパス」: Optimizeit_dir/lib
「JVM オプション」: 次の各オプションを使用するには、「JVM オプション」フィールドにオプションを入力し、「追加」を選択してから、「JVM オプション」リストで該当するボックスにチェックマークをつける
- 次のように server.xml ファイルを編集する
<!-- Optimizeit options -->
<profiler name="optimizeit" classpath="Optimizeit_dir/lib/optit.jar"
native-library-path="Optimizeit_dir/lib" enabled="true">
<jvm-options>
-DOPTIT_HOME=Optimizeit_dir -Xboundthreads -Xrunoii
-Xbootclasspath/a:Optimizeit_dir/lib/oibcp.jar
</jvm-options>
</profiler>さらに、 server.policy ファイルを次のように設定する必要があります。
grant codeBase "file:Optimizeit_dir/lib/optit.jar" {
permission java.security.AllPermission;
};server.policy ファイルの詳細は、「server.policy ファイル」を参照してください。
この設定でサーバーが起動したら、プロファイラを使用できます。詳細は、Optimizeit のマニュアルを参照してください。
注 設定オプションのいずれかが欠けていたり正しくない場合は、プロファイラに問題が生じ、Sun ONE Application Server の性能に影響が出ます。
Wily Introscope プロファイラ
Wily Technology 社の Introscope/sup> に関する情報は、次のサイトから入手できます。
http://www.wilytech.com/solutions_introscope.html
次の手順に従って Introscope をインストールすると、そのライブラリがサーバープロセス内に読み込まれます。
Introscope を使ったリモートプロファイルを有効にするには、server.xml ファイルを次のように編集します。
<!-- Introscope options. For Win2K, use ; in classpath -->java-config ... bytecode-preprocessors" value="S1ASAutoProbe" ... >
<profiler name="wily" enabled="true"
classpath="Wily_dir/ProbeBuilder.jar:Wily_dir/Agent.jar" >
</profiler>
</java-config>この設定でサーバーを起動すると、プロファイラを使用できます。詳細は、Introscope のマニュアルを参照してください。
注 設定オプションのいずれかが欠けていたり正しくない場合は、プロファイラに問題が生じ、Sun ONE Application Server の性能に影響が出ます。
Jprobe プロファイラ
Sitraka 社の JProbeTM に関する情報は、次のサイトから入手できます。
http://www.klgroup.com/software/jprobe/
次の手順に従って JProbe をインストールすると、そのライブラリがサーバープロセス内に読み込まれます。
JProbe を使ったリモートプロファイルを有効にするには、次の手順に従います。
- JProbe 3.0.1.1 をインストールします。このバージョンは、JDK 1.4 をサポートしています。詳細は、JProbe のマニュアルを参照してください。
- 次の方法のいずれかで Sun ONE Application Server を設定します。
管理インタフェースでサーバーインスタンスのページを表示して「JVM 設定」タブを選択し、「Java ホーム」フィールドに JDK 1.4.0 または 1.4.0_01 へのパスを入力して「保存」を選択する
「プロファイラ」オプションを選択して次のフィールドを編集し、「保存」を選択してからサーバーを再起動します。
「ネイティブライブラリパス」: JProbe_dir/profiler
「JVM オプション」: 次の各オプションを使用するには、「JVM オプション」フィールドにオプションを入力し、「追加」を選択してから、「JVM オプション」リストで該当するボックスにチェックマークをつける
-Xbootclasspath/p:JProbe_dir/profiler/jpagent.jar
-Xrunjprobeagent
-Xnoclassgc
server.xml ファイルを必要に応じて変更し、サーバーを再起動する
<java-config java-home="JDK_path" ...>
<profiler name="jprobe" enabled="true"
native-library-path="JProbe_dir/profiler" >
<jvm-options>
-Xbootclasspath/p:JProbe_dir/profiler/jpagent.jar
-Xrunjprobeagent -Xnoclassgc
</jvm-options>
</profiler>
</java-config>
この設定でサーバーが起動したら、プロファイラを使用できます。
- 次の環境変数を設定します。
JPROBE_ARGS_0=-jp_input=JPL_file_path
JPL ファイルの作成方法についての説明は、手順 6 を参照してください。
- サーバーインスタンスを起動します。
- jpprofiler を起動して、リモートセッションに接続します。デフォルトのポートは 4444 です。
- JProbe Launch Pad を使って JPL ファイルを作成します。必要な設定は次のとおりです。
アプリケーションタイプとして「Server Side」を選択します。
「Program」タブで次の詳細情報を設定します。
「Target Server」 - other_server
「Server home Directory」 - install_dir
「Server class File」 - com.iplanet.ias.server.J2EERunner
「Working Directory」 - install_dir
「Classpath」 - install_dir/lib/appserv-rt.jar
「Source File Path」 - source_code_dir (行レベルの詳細を知る必要がある場合)
「Server class arguments」 - (オプション)
「Main Package」 - com.iplanet.ias.server
「VM」タブ、「Attach」タブ、および「Coverage」タブも適切に設定する必要があります。詳細は、JProbe のマニュアルを参照してください。JPL ファイルを作成した後は、これを JPROBE_ARGS_0 への入力として使います。