富士通

よくあるご質問(FAQ) - Interstage Application Server

共通

  • 対象製品
    INTERSTAGE Application Server V3 / V4
    Interstage Application Server V5 / V6 / V7 / V8
  • 対象OS
    Windows / Solaris / Linux

Q

Java VMを起動する際のオプション”-XX:+JavaMonitorsInStackTrace”の「-XX」およびそれに指定されている「+JavaMonitorsInStackTrace」の意味について教えてください。

A

-XXで開始されるjavaのオプションは、JDK1.3.0以降でサポートされているJavaVM(HotSpot VM)用のオプションです。将来に渡ってサポートされる保証がないため一般に公開されていません。-XX:+JavaMonitorsInStackTraceは、JDK1.3系でJavaのスレッド情報にオブジェクトの占有、解放待ちを示す情報を付加させるオプションです。例えば、通常のjavaコマンド実行では、フルスレッドダンプのスタックトレースが、



"Thread-1" prio=1 tid=0x80bbea0 nid=0x68f1 waiting for monitor entry [0xbe7ff000..0xbe7ff8c0]
at TestA.method_a2(Test.java:14)
at TestB.method_b1(Test.java:23)
at Thread2.run(Test.java:54)

のようになりますが、-XX:+JavaMonitorsInStackTraceを付加して実行することで、



"Thread-1" prio=1 tid=0x80bbea0 nid=0x68f1 waiting for monitor entry [0xbe7ff000..0xbe7ff8c0]
at TestA.method_a2(Test.java:14)
- waiting to lock <436aad90> (a TestA)
at TestB.method_b1(Test.java:23)
- locked <436ab978> (a TestB)
at Thread2.run(Test.java:54)

のように、オブジェクトの占有(locked)、解放待ち(waiting to lock)の情報が出ます。これを他のスレッドと照合してJavaアプリレベルのデッドロック検出が可能となります。
なお、-XX:+JavaMonitorsInStackTrace はJDK1.3系で有効であり、JDK1.2.2ではこのオプションは受け入れられません。JDK1.2.2ではスレッドダンプの形式が異なるものの、対応する情報はデフォルトで出力されているため、このオプションは指定しないでください。
また、JDK1.4系では-XX:+JavaMonitorsInStackTraceはデフォルトとなっていますので指定する必要はありません。従ってJDK1.3系に閉じて指定してください。