第9章 J2EEアプリケーション開発・運用時の異常
A.1 メソッドトレース機能
A.1.6 トレース情報出力の形式
timeStamp
タイムスタンプ出力の有効/無効を指定します。
timeStamp=true | false
以下のどちらかの定義値を指定します。
- true: タイムスタンプを出力する
- false: タイムスタンプを出力しない(省略値)
“true”、“false”以外の定義値を指定した場合、その行を無効とします。また、“timeStamp”の記述がない場合、“false”が
指定されたものと解釈します。
注意
“timeStamp=true”を指定した場合、メソッドトレース機能は日付と時刻の表示のため、以下のクラスを使用しています。
用しています。
- java.util.Calendar
- java.text.SimpleDateFormat
これらのクラスおよび関連するクラス(*)を直接または間接的に、複数のスレッド間で同時に使用するアプリケーショ ンでは、デッドロックを引き起こす場合があります。
その場合、本指定をfalseに変更するか、または、トレースを行わないクラスとして“not_traceMethod”で指定してく ださい。
*)例えば、以下のクラスです。
- java.util.GregorianCalendar - java.util.SimpleTimeZone - java.util.TimeZone
traceFile
トレース情報を出力するファイルのフルパスを指定します。
traceFile=トレース情報出力ファイル名
パス中のディレクトリは存在している必要があります。
パス中のディレクトリが存在しない場合、この行は無効となります。
また、同名のファイルがすでに存在した場合、上書きされます。
メソッドトレース機能を一般ユーザで起動した場合には、その一般ユーザに対する書き込み権が付与されているファイルを 指定します。
注意
他の定義名との指定について
- “traceDirectory”と同時に指定された場合、本指定が優先されます。
- 本指定が省略された場合、“traceDirectory”が指定されたものとして処理します。
- 本指定と“traceDirectory”が省略された場合は、標準出力(または、使用方法記載のログファイル)にトレース情報が 出力されます。
- 本指定と同時に“traceFileCount”、“traceFileSize”を指定した場合、“traceFileCount”、“traceFileSize”の指定は無 効となります。
注意
ファイル出力中、出力先のディスク容量が不足した場合、それ以降のトレースは出力されません。
traceDirectory
トレース情報出力ファイルを格納するディレクトリのフルパスを指定します。
traceDirectory=トレース情報出力ファイルを格納するディレクトリ
ディレクトリは存在している必要があります。
存在しないディレクトリを指定した場合は、この行は無効となります。
また、同名のメソッドトレース情報出力ファイルが存在した場合、上書きします。
メソッドトレース機能を一般ユーザで起動した場合には、その一般ユーザに対する書き込み権が付与されているディ レクトリを指定します。
- 指定のディレクトリには、次のルールでトレース情報出力ファイルを作成します。
mt<プロセスID>_n.log mt
トレース情報出力ファイルであることを示す固有の文字列です。
<プロセスID>
Javaアプリケーションが動作しているプロセスIDです。
_n
ファイル番号を示します。
nは、0から始まり、最大で“traceFileCount”に指定した値-1までの番号が振られます。
.log
ファイルの拡張子です。
注意
他の定義名との指定について
- “traceFile”と同時に指定された場合、本指定は無効となります。
- “traceFile”と本指定が省略された場合は、標準出力(または、使用方法記載のログファイル)にトレース情報が出力 されます。
- 作成されるメソッドトレース情報出力ファイルは、“traceFileCount”に指定した個数作成され、さらに出力がある場合、
ファイル番号0のファイルから上書きします。
注意
ファイル出力中、出力先のディスク容量が不足した場合、それ以降のトレースは出力されません。
traceFileCount
トレース情報出力ファイルのローテーション数を指定します。
traceFileCount=トレース情報出力ファイルのローテーション数
1~10(個)が指定可能です。省略値は、2(個)です。
“traceFileCount”の記述がない場合、省略値と解釈します。
0以下の定義値を指定した場合は、1と解釈します。11以上の定義値を指定した場合は10と解釈します。
数字以外を指定した場合は、省略値と解釈します。
注意
他の定義名との指定について
- 本指定は“traceDirectory”が指定された場合に有効です。
- “traceFile”が指定された場合は、無効となります。
traceFileSize
トレース情報出力ファイルの1個あたりの最大サイズ(MB)を指定します。
traceFileSize=トレース情報出力ファイルの最大サイズ
1~2147483647(MB)が指定可能です。省略値は、1(MB)です。
“traceFileSize”の記述がないか、以下を指定した場合は、省略値と解釈します。
- 1より小さな値
- 2147483647より大きな値
- 整数値以外の値
- 数字以外を指定
指定された定義値を境にファイルローテーションされます。
1行で示されるenter情報またはexit情報が2つのファイルに分割されるのを防ぐため、ファイルのサイズが定義値より大き くなる場合があります。
注意
他の定義名との指定について
- 本指定は“traceDirectory”が指定された場合に有効です。
- “traceFile”が指定された場合は、無効となります。
例
制御ファイルの記述例
#
# Interstage Component FJTRACE sample configuration file.
#
statementStyle=REGEX valueLevel=full timeStamp=false traceDirectory=D:\tmp traceFileCount=2 traceFileSize=1
traceMethod=^com/fujitsu/interstage/XXXX$ ^methodA$
traceMethod=^com/fujitsu/interstage/XXXX$ ^methodB$ (Ljava/lang/String;)V traceMethod=^com/fujitsu/interstage/XXXX/YYYY$ .*
---記述例では、以下のようになります。
・ トレース情報出力形式: メソッドの引数および戻り値の情報を出力する
・ タイムスタンプ出力: タイムスタンプを出力しない
・ ファイル出力先ディレクトリ: D:\tmp 配下
・ ファイルローテーション数: 2(個)
・ ファイルの最大サイズ: 1ファイルあたり1(MB)
・ トレース対象メソッド:
"com.fujitsu.interstage.XXXX"クラスの"methodA"メソッド、"methodB"メソッド(ただし、メソッドのシグネチャが"(Ljava/
lang/String;)V"のメソッドのみ)、"com.fujitsu.interstage.XXXX.YYYY"クラスのすべてのメソッド
statementStyle=BASIC(指定を省略)とした場合、以下は上記例と同じ意味を示しています。
#
# Interstage Component FJTRACE sample configuration file.
#
valueLevel=full timeStamp=false traceDirectory=D:\tmp traceFileCount=2 traceFileSize=1
traceMethod=com.fujitsu.interstage.XXXX methodA
traceMethod=com.fujitsu.interstage.XXXX methodB (Ljava/lang/String;)V traceMethod=com.fujitsu.interstage.XXXX.YYYY *
---Servletサービスの記述例
statementStyle=REGEXとし、総称指定を使用してServletサービスのトレースを採取する場合、ClassNotFoundExceptionと いうエラーメッセージが発生する場合があります。
このメッセージを止めたい場合は、トレースするクラスを詳細に指定し直すか、あるいは使用中のIJServerに合わせ(○印が 指定)、以下のjarファイルのパスをclassPath指定に追加してください。
以下の説明は、Windows(R)上で、製品をC:\Interstageにインストールした場合です。
クラス名 V9.0以降のIJServer
C:\Interstage\lib\isjmxrt.jar ○
クラス名 V9.0以降のIJServer
C:\Interstage\lib\isjmxcommon.jar ○
C:\Interstage\lib\log4j-1.2.8.jar ○
C:\Interstage\lib\commons-logging-api.jar ○
C:\Interstage\lib\commons-digester.jar ○
C:\Interstage\lib\commons-collections.jar ○
C:\Interstage\lib\commons-modeler.jar ○
C:\Interstage\lib\commons-beanutils.jar ○
C:\Interstage\lib\javax77.jar ○
C:\Interstage\lib\j2ee-sv-server.jar ○
C:\Interstage\lib\servlet-server.jar ○
C:\Interstage\lib\servlet-common.jar ○
C:\Interstage\lib\ejb-server.jar ○
C:\Interstage\J2EE\lib\isj2ee.jar ○
C:\Interstage\J2EE\lib\isdeploy60.jar ○
C:\Interstage\J2EE\lib\ijserverconfig.jar ○
C:\Interstage\jmx\addons\jmxremote\lib\jmxremote.jar ○
C:\Interstage\F3FMjs5\common\jslib配下のjarファイル (注1) ○
C:\Interstage\F3FMjs5\common\lib配下のjarファイル (注1) ○
C:\Interstage\F3FMjs5\server\jslib配下のjarファイル (注1) ○
C:\Interstage\F3FMjs5\server\lib配下のjarファイル (注1) ○
コンテナログにIJServer31009のメッセージで出力されるjarファイル ○ 注1) 必ずこの順番で記載してください。
Webアプリケーションで使用しているユーザが作成したクラスで、ClassNotFoundExceptionが発生する場合があります。
これは、Webアプリケーションから使用されるjar群、class群は、war形式に沿ってWEB-INF/libやWEB-INF/classesに配置 され動的に決定される場合があるためです。
この場合、配備されるパスをclassPathに追加します。
SampleServer.warというアプリケーションの場合の例を、以下に示します。
C:\Interstage\J2EE\var\deployment\ijserver\SampleServer\apps\SampleServer.war\WEB-INF\classes
C:\Interstage\J2EE\var\deployment\ijserver\SampleServer\apps\SampleServer.war\WEB-INF\lib\app-library.jar
※Windows(R)上で、製品をC:\Interstageにインストールした場合です。
また、他にもアプリケーションで使用しているjarファイルがある場合(IJServerディレクトリのShared/libディレクトリ配下など)、
これらもあわせてclassPathに追加してください。
Servletサービスのトレースを採取する場合の設定ファイル例(statementStyle=BASIC)を以下に示します。
〔V9.0以降のIJServerを使用している場合〕
#
# Interstage Component FJTRACE sample configuration file.
#
# javax.servlet.ServletConfigの実装クラス
traceMethod=org.apache.catalina.core.StandardWrapperFacade *
# javax.servlet.ServletContextの実装クラス
traceMethod=org.apache.catalina.core.ApplicationContextFacade *
# javax.servlet.http.HttpServletRequestの実装クラス traceMethod=org.apache.catalina.connector.RequestFacade *
# javax.servlet.http.HttpServletRequest(ディスパッチ後) traceMethod=org.apache.catalina.core.ApplicationHttpRequest *
# javax.servlet.http.HttpServletResponseの実装クラス traceMethod=org.apache.catalina.connector.ResponseFacade *
# javax.servlet.http.HttpServletResponse(include後)
traceMethod=org.apache.catalina.core.ApplicationHttpResponse *
# javax.servlet.http.HttpSessionの実装クラス
traceMethod=org.apache.catalina.session.StandardSessionFacade *
# javax.servlet.RequestDispatcherの実装クラス
traceMethod=org.apache.catalina.core.ApplicationDispatcher *
# javax.servlet.ServletInputStreamの実装クラス
traceMethod=org.apache.catalina.connector.CoyoteInputStream *
# javax.servlet.ServletOutputStreamの実装クラス
traceMethod=org.apache.catalina.connector.CoyoteOutputStream *
# HttpServletResponseから取り出すjava.io.PrintWriter traceMethod=org.apache.catalina.connector.CoyoteWriter *
# JSP outオブジェクトの実装クラス
traceMethod=org.apache.jasper.runtime.JspWriterImpl *
#サーブレットの実装クラス
traceMethod=<サーブレットクラス名> *
# javax.servlet.jsp.HttpJspPageの実装クラス traceMethod=org.apache.jsp.<JSP file name>_jsp * valueLevel=addHex
timeStamp=true
---サーブレットクラスのメソッドトレースを採取する場合、サーブレットクラス名はweb.xmlファイル等から確認してください。
JSPで作成したクラスのメソッドトレースを採取する場合、次のように指定します。
traceMethod=org.apache.jsp.<JSP file name>_jsp *
パッケージ“org.apache.jsp.”にクラス名<JSP file name>_jsp(JSP file nameにJSPソースのファイル名を指定し、その後ろに
“_jsp”をつけます)と指定します。
Webアプリケーションのルートディレクトリ配下のサブディレクトリにJSPが格納されている場合は、サブディレクトリ名が org.apache.jsp.に続くパッケージ名に含まれます。
メソッド名、シグネチャに関しては、通常と同じ指定が可能です。
注意
状況に応じて必要のないクラスはコメントアウトしてください。