ページの先頭行へ戻る
Interstage Application Server V13.1.0 チューニングガイド
FUJITSU Software

7.3.6 クラスロード時のトラブルが発生した場合

Javaのクラス管理の特長として、委譲モデルと呼ばれる複数のクラスローダを組み合わせた機構や、jar/warファイルなどのパッケージ機構があります。

この機構により、Javaプロセス内でのアプリケーションテナント化やクラスファイル資産管理ができる一方で、以下のトラブルが発生することがあります。

このようなクラスローダやクラス管理のトラブルを調査するためには、クラスがどこ(jar/warファイルなど)から、どのクラスローダでロードされたかを確認する必要があります。

クラスのロード情報調査

クラスロードの発生状況を調査するためには、““ClassLoadTrace”イベント”を使用します。

  1. JMCで[アウトライン]タブの[イベント・ブラウザ]を選択します。

  2. 表示された[イベント・タイプ・ツリー]から、[Fujitsu Extended Event]の[Class Load Trace]を選択します。

    “ClassLoadTrace”イベントの一覧が表示されます。

    クラスがどこからロードされたかは[Loaded Class Source]に表示され、クラスをロードしたクラスローダは[定義クラス・ローダー]に表示されます。

    トラブルが疑われるクラスを、[Loaded Class]から探します。そのクラスの[Loaded Class Source]や[定義クラス・ローダー]を参照して、正しくクラスがロードされたかを調査します。

    例えば上記では、“F:\work\build\sample.jar”から“com.fujitsu.jdk.SampleClass”というクラスがシステムクラスローダによってロードされていることがわかります。

    “stackTrace”プロパティを“true”に指定している場合、[スタック・トレース]にイベント発生時のスタックトレースが表示されますので、調査対象のクラスをロードしているアプリケーションのコードがわかります。

“ClassLoadTrace”イベント

“ClassLoadTrace”イベントは、本製品で提供するOpenJDKが実装している拡張機能であるため、“default.jfc”および“profile.jfc”のイベント設定ファイルでは使用できません。

また、“extend.jfc”に以下のように設定されており、デフォルトで有効になっています。スタックトレースはデフォルトでは記録されない設定になっています。設定を変更する場合は、“extend.jfc”の設定を修正した別のイベント設定ファイルを作成し、使用してください。

<event name="com.fujitsu.jdk.ClassLoadTrace">
 <setting name="enabled" control="class-loading-enabled">true</setting>
 <setting name="stackTrace">false</setting>
 <setting name="threshold">0 ms</setting>
</event>

イベント設定ファイルの設定方法は、“イベント設定ファイル”を参照してください。

  • “enabled”プロパティ

    • true:イベントを有効にします。

    • false:イベントを無効にします。

  • “stackTrace”プロパティ

    • true:クラスをロードしたときのスタックトレースをイベントに出力します。

    • false:クラスをロードしたときのスタックトレースをイベントに出力しません。

  • “threshold”プロパティ

    クラスのロードにかかる時間をしきい値として指定します。このプロパティに指定した値以上の時間がかかったクラスのロードだけイベントに記録されます。

    値の形式:
    • “<整数> <単位>”で指定します。

    • <整数>前後の空白は無視します。

    • <整数>に0を指定した場合、ロード時間に関わらず全クラスロードが記録の対象になります。

    • 単位として次の文字を指定します。

      ・ナノ秒を指定する場合: “ns”

      <整数>の指定範囲:0以上、9223372036854775807以下

      ・マイクロ秒を指定する場合: “us”

      <整数>の指定範囲:0以上、9223372036854775以下

      ・ミリ秒を指定する場合: “ms”

      <整数>の指定範囲:0以上、9223372036854以下

      ・秒を指定する場合: “s”

      <整数>の指定範囲:0以上、9223372036以下

      ・分を指定する場合: “m”

      <整数>の指定範囲:0以上、153722867以下

      ・時を指定する場合: “h”

      <整数>の指定範囲:0以上、2562047以下

      ・日を指定する場合: “d”

      <整数>の指定範囲:0以上、106751以下

ポイント

多数のクラスロードが想定され、ロードに時間がかかっているクラスロードだけを表示したい場合は、“threshold”プロパティを修正してください。

クラスがロードされるまでの経緯を調べたい場合は、“stackTrace”プロパティを“true”に指定してください。