ページの先頭行へ戻る
Interstage Application Server V12.0.0 トラブルシューティング集
FUJITSU Software

A.1.4 制御ファイルの作成方法

制御ファイルの作成方法を説明します。

制御ファイルは、メソッドトレース機能の動作を定義するためのファイルです。
制御ファイル名は、メソッドトレース機能を使用するJava VMの起動時に指定します。
トレース対象のメソッド名、トレース情報の出力形式、トレース情報の出力先、ファイルローテーションの動作などを定義できます。

記述形式

制御ファイルは、以下の形式で記述します。

定義名=定義値

なお、メソッドトレース機能の格納先に、制御ファイルのサンプル(fjtrace.conf)がありますので、参考にしてください。

定義項目の一覧

制御ファイルに定義できる項目を、次の表に示します。

定義名

説明

statementStyle

トレース対象のメソッドの指定に正規表現を用いるかを指定します。
制御ファイルの記述の誤りについて通知するメッセージの出力にも影響を与えます。

traceMethod

トレース対象のメソッドを指定します。

not_traceMethod

非トレース対象のメソッドを指定します。

classPath

動的に決定されるクラスパスを指定します。

valueLevel

メソッドの引数および戻り値情報の出力形式を指定します。

timeStamp

タイムスタンプ出力の有無を指定します。

traceFile

トレース情報を出力するファイル名を指定します。

traceDirectory

トレース情報出力ファイルを格納するディレクトリを指定します。

traceFileCount

トレース情報出力ファイルのローテーション数を指定します。

traceFileSize

トレース情報出力ファイルの最大サイズを指定します。

statementStyle

トレース対象のメソッドの指定に正規表現を使用するかを指定します。

statementStyle=REGEX | BASIC

以下のどちらかの定義値を指定します。

  • REGEX: 正規表現を使用する

  • BASIC: 正規表現を使用しない(省略値)

“REGEX”、“BASIC”以外の定義値を指定した場合、その行は無効となります。また、“statementStyle”の記述がない場合、“BASIC”が指定されたものと解釈します。

注意

本指定に誤りがある場合は、制御ファイルの記述に誤りがあったことを通知するメッセージを標準出力(または、使用方法記載のログファイル)に出力します。
(“statementStyle”の記述が無い場合は、メッセージの出力は行われません。)

traceMethod、not_traceMethod

トレース対象または、非トレース対象のメソッドを指定します。

traceMethod=クラス名 メソッド名 [シグネチャ]
not_traceMethod=クラス名 メソッド名 [シグネチャ]
※[ ]は省略可能。

  • “traceMethod”、“not_traceMethod”ともに複数指定できます。
    “traceMethod”が1つも指定されていない場合は、トレースを行わずにアプリケーションを実行します。
    “not_traceMethod”、“statementStyle=REGEX”が指定されている場合にのみ有効です。
    (“statementStyle=BASIC”の場合、無効となります。)

  • クラス名、メソッド名、シグネチャはそれぞれ半角空白で区切ります。
    “traceMethod”、“not_traceMethod”とも、“statementStyle”の指定に影響を受けます。

statementStyle=REGEX指定の場合

  • クラス名:クラス名を指定します。

    パッケージ階層の区切りは'/'です。

    例) javax/servlet/http/HttpServletRequest

    クラス名には、インターフェース名やスーパークラス名を指定することもできます。
    インターフェース名を指定した場合、トレース対象のプログラム内で指定のインターフェースを実装しているクラス(インターフェースメソッド)をトレースします。
    スーパークラス名を指定した場合、トレース対象のプログラム内で指定のクラスをスーパークラスに持つクラス(オーバライドしたメソッド)をトレースします。

    正規表現を用いることで、“すべてのクラス”の指定ができます。

    • .*

      すべてを意味します(“.”は任意の1文字、“*”は繰り返しを示します)。

    • [a-z]

      範囲を示す表記です。
      この場合、aからz(小文字のアルファベット)を意味します。
      “[a-z]*”とすることで、小文字のアルファベットを含む文字列を意味します。

    • ^クラス名$

      完全一致を意味します(^は前方一致、$は後方一致を示します)。

    正規表現の詳細は、apacheの提供する、jakarta-regexp V1.2のorg.apache.regexp.REのAPI仕様を参照してください。

    正規表現の構文が誤っていた場合、その行を無効とし、Warningメッセージ(FJTRACE:400)を標準出力(または、使用方法記載のログファイル)に出力します。

    注意

    正規表現 "[:graph:]"、"[:alpha:]"、"[:alnum:]"、"\w"には、既存のバグが存在するため正しく動作しません。
    これらの正規表現の代わりに、それぞれ、"[:print:]"、"[a-zA-Z]"、"[a-zA-Z0-9]"、"[a-zA-Z0-9_]"を使用してください。

    注意

    .*を用いた場合、実行性能が極度に劣化します。パッケージ名を指定するなど、部分的な総称となるように指定してください。

  • メソッド名:メソッド名を指定します。

    クラス名の指定に応じて、次の意味になります。

    • クラス名:実装したメソッド名

    • インターフェース名:インターフェースメソッド名

    • スーパークラス名:サブクラスがオーバライドしたメソッド名

    正規表現の指定ができます。

    • .*

      すべてを意味します("."は任意の1文字、"*"は繰り返しを示します)。

    • [a-z]*

      アルファベットの小文字を含む文字列を意味します。

    • ^メソッド名$

      完全一致を意味します(^は前方一致、$は後方一致を示します)。

    正規表現の詳細は、apacheの提供する、jakarta-regexp V1.2のorg.apache.regexp.REのAPI仕様を参照してください。

    正規表現の構文が誤っていた場合、その行を無効とし、Warningメッセージ(FJTRACE:400)を標準出力(または、使用方法記載のログファイル)に出力します。

    注意

    正規表現 "[:graph:]"、"[:alpha:]"、"[:alnum:]"、"\w"には、既存のバグが存在するため正しく動作しません。
    これらの正規表現の代わりに、それぞれ、"[:print:]"、"[a-zA-Z]"、"[a-zA-Z0-9]"、"[a-zA-Z0-9_]"を使用してください。

  • シグネチャ:シグネチャを指定します。省略可能です。

    指定するとクラス名、メソッド名で限定されたメソッドのうち、さらにシグネチャの一致する特定のメソッドを対象とします。たとえば、クラス内にメソッド名に一致するメソッドが複数存在する(オーバーロードメソッド)場合に、特定のメソッドにトレースを限定できます。

    シグネチャは、引数を示すデータ型を"()"で囲み、戻り値を示すデータ型をその後に続けて指定します。データ型の表記方法は、“データ型の表記方法”を参考にしてください。

    引数を持たず、戻り値がvoid型のメソッドの場合

    引数がないため"()"内は記述しません。戻り値void型は")"の後ろに"V"を記述して示します。

    "()V"

    String型の配列とboolean型の2つ引数を持ち、戻り値がint型のメソッドの場合

    "([Ljava/lang/String;Z)I"

statementStyle=BASIC指定の場合

  • クラス名:クラス名を指定します。

    パッケージ階層の区切りは'.'です。

    例) org.apache.catalina.connector.RequestFacade

    注意

    '*'による“すべてのクラス”の指定はできません。

  • メソッド名:メソッド名を指定します。

    指定には、次の2つの方法があります。

    • メソッド名:クラス名に指定したクラス内で完全一致するメソッドすべてを対象とします。

    • *:クラス名で指定したクラス内すべてのメソッドを対象とします。

  • シグネチャ:シグネチャを指定します。省略可能です。

    指定するとクラス名、メソッド名で限定されたメソッドのうち、さらにシグネチャの一致する特定のメソッドを対象とします。たとえば、クラス内にメソッド名に一致するメソッドが複数存在する(オーバーロードメソッド)場合に、特定のメソッドにトレースを限定できます。

    シグネチャは、引数を示すデータ型を"()"で囲み、戻り値を示すデータ型をその後に続けて指定します。データ型の表記方法は、“データ型の表記方法”を参考にしてください。

    引数を持たず、戻り値がvoid型のメソッドの場合

    引数がないため"()"内は記述しません。戻り値void型は")"の後ろに"V"を記述して示します。

    "()V"

    String型の配列とboolean型の2つ引数を持ち、戻り値がint型のメソッドの場合

    "([Ljava/lang/String;Z)I"

データ型の表記方法

シグネチャの文字

boolean

Z

byte

B

char

C

short

S

int

I

long

J

float

F

double

D

void

V(戻り値の場合のみ)

クラス(注)

Lクラス名;
※'L'で始まり、';'で終わります。
クラス名は、パッケージ名を含む完全なクラス名を使用します。この時の区切り文字は'/'です。

例) Stringクラスの場合: "Ljava/lang/String;"

配列

[

参考

メソッドのシグネチャを確認するには、JDKに含まれるjavapコマンドに-sオプションを指定します。

javap -s クラス名

注意

以下のパッケージ配下のクラスは、メソッドトレースの指定はできません。指定しても、無効となります。

  • com.fujitsu.jvm.mt

  • org.apache.regexp

  • jdk.internal.org.objectweb.asm

また、“トレース不可のクラス”に示すクラスについては、トレース情報を出力できません。

mainメソッドを含むクラスに実装されたメソッドがトレース対象となった場合、クラスをロードするタイミングでメソッドトレースの使用するオブジェクトと競合を起こし、まれにデッドロックが発生することがあります。
その場合、以下の指定を追加することで回避できることがあります。

  • statementStyle=REGEX指定の場合

    traceMethod=java/net/URLClassLoader.* .*

  • statementStyle=BASIC指定の場合

    traceMethod=java.net.URLClassLoader$1 *

classPath

メソッドトレース対象のアプリケーションが動的に決定するクラスパス(環境変数CLASSPATHに記述せず、アプリケーション内で設定するクラスパス)を持つ場合に指定します。
クラスパスの設定は、メソッドトレース機能が動作するOS環境の決まりに従います(環境変数CLASSPATHと同様の記述を行います)。

classPath=動的設定されるクラスパス

“classPath”は、“statementStyle=REGEX”が指定されている場合にのみ有効です。“statementStyle=BASIC”の場合、無効となります。

  • “classPath”の指定がない場合、環境変数CLASSPATHに指定されたパスが使われます。

  • “classPath”の指定がある場合、指定したパスの後ろに環境変数CLASSPATHのパスをつなげたものが使われます。

注意

複数のクラスパスを記述する必要がある場合、区切り文字“;”(SolarisおよびLinuxの場合は、コロン(:))でつないで1行で制御ファイルに記載します。改行はしないでください。

以下は、Windows(R)上で、製品をC:\Interstageにインストールした場合です。

classPath=C:\Interstage\lib\isjmxrt.jar;C:\Interstage\lib\isjmxcommon.jar;[…略]

valueLevel

メソッドの引数および戻り値の出力形式を指定します。

valueLevel=full | addHex | none

以下のどちらかの定義値を指定します。

  • full: 引数および戻り値の情報を出力する(省略値)

  • addHex:“full”の機能に加え、文字列の16進数表示を出力する

  • none: 引数および戻り値の情報を出力しない

“full”、“addHex”、“none”以外の定義値を指定した場合、その行は無効となります。また、“valueLevel”の記述がない場合、“full”が指定されたものと解釈します。
引数、戻り値の出力形式の詳細は、“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 *
----------------------------------------------------------------------

Enterprise EditionServletサービスの記述例

statementStyle=REGEXとし、総称指定を使用してServletサービスのトレースを採取する場合、ClassNotFoundExceptionというエラーメッセージが発生する場合があります。
このメッセージを止めたい場合は、トレースするクラスを詳細に指定し直すか、あるいは使用中のIJServerに合わせ(○印が指定)、以下のjarファイルのパスをclassPath指定に追加してください。

以下の説明は、Windows(R)上で、製品をC:\Interstageにインストールした場合です。

クラス名

V9.0以降のIJServer

C:\Interstage\lib\isjmxrt.jar

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.に続くパッケージ名に含まれます。
メソッド名、シグネチャに関しては、通常と同じ指定が可能です。

注意

状況に応じて必要のないクラスはコメントアウトしてください。

上記各実装クラスやJSPで作成したクラスの名前は、使用状況やInterstageのバージョン・レベル等により変化する場合があります。

Enterprise EditionEJBサービスの記述例

statementStyle=BASICを指定した場合、EJBアプリケーションのデバッグ時にメソッドトレース機能を使用する場合は、作成したEJBアプリケーションのEnterprise Beanクラスを指定してください。
CMP2.0 Entity Beanの場合、Enterprise Beanクラスに“_PM”を加えた文字列を指定してください。

CMP2.0 Entity BeanのEnterprise BeanクラスがflightSample.CustomerBeanの場合

flightSample.CustomerBean_PM

制御ファイルの更新を反映する方法

制御ファイルは、アプリケーションの起動時に一度だけ読み込まれます。
制御ファイルの内容を更新し、その内容をメソッドトレースに反映させるためには、javaコマンドの再起動が必要になります。

IJServerクラスタ(Java EE 7機能)の場合では、IJServerクラスタの再起動が必要になります。
IJServerクラスタ(Java EE 7機能)の操作については“Java EE 7 設計・構築・運用ガイド”を参照してください。

Enterprise EditionIJServerの場合では、ワークユニットの再起動が必要になります。
なお、ワークユニットの操作方法は、“Interstage管理コンソール ヘルプ”の[Interstage管理コンソール] > [Interstage Application Server] > [システム] > [ワークユニット] > [ワークユニットごとの操作] > [IJServer] > [操作]を参照してください。