| Interstage Application Server/Interstage Web Server トラブルシューティング集 |
目次
索引
![]()
|
| 付録A Javaツール機能 | > A.4 スレッドダンプツール |
以下にデッドロックのサンプルプログラムと、スレッドダンプの出力例を示します。
スレッドダンプの解析方法は、“チューニングガイド”の“JDK/JREのチューニング”の“スレッドダンプ”を参照してください。
-------------------------------------------------------------------------------
public class Deadlock implements Runnable {
volatile boolean finished = false;
public void run() {
try {
synchronized (this) {
while (!finished) {
System.out.print(".");
Thread.sleep(500);
}
}
}
catch (InterruptedException ex) {
ex.printStackTrace(System.out);
Thread.currentThread().interrupt();
}
}
public static void main(String args[]) {
Object obj = new Object();
Deadlock test = new Deadlock();
Thread th = new Thread(test, "Child");
try {
th.start();
Thread.sleep(5000);
synchronized (test) {
test.finished = true;
}
}
catch (Exception ex) {
ex.printStackTrace(System.out);
}
}
}
-------------------------------------------------------------------------------
このサンプルプログラムは、run()メソッドで、DeadLockクラスのインスタンスに対して、synchronized句によりロックを取得しています。run()メソッドは、finishedフラグがfalseの間ループを繰り返します。一方、main()メソッドは、run()メソッド呼出し後に、DeadLockクラスのインスタンスに対してロックを獲得できたならば、finishedフラグをtrueに設定します。
この例の場合、run()メソッドが、DeadLockクラスのインスタンスに対してロックを獲得していますので、main()メソッドはロックを獲得できずに、ハングアップします。
JDK 5.0におけるスレッドダンプの出力例を次に示します。
-------------------------------------------------------------------------------
****************************************************************
Java Thread dump Tool for WindowsNT/2000/XP
Copyright(c) 2002 FUJITSU LIMITED. All rights reserved.
start at Tue Jan 23 15:41:52 2007
cmd = C:\Interstage\jdk50\bin\java Deadlock
Memory usage (Free/Total) = 4710952/5111808 (bytes)
(ProcessId = 0x9fc, Tool ThreadId = 0x764)
****************************************************************
Full thread dump Java HotSpot(TM) Server VM (1.5.0_FUJITSU_MODIFIED-B02 mixed mode):
[pid=2556] Time=Tue Jan 23 15:41:52 2007
"Java Thread dump tool" prio=10 tid=0x03c96510 nid=0x764 waiting on condition [0x00000000..0x046dfd60]
"Child" prio=6 tid=0x03c8be00 nid=0xfec waiting on condition [0x0457f000..0x0457fa1c]
at java.lang.Thread.sleep(Native Method)
at Deadlock.run(Deadlock.java:8)
- locked <0x179411b0> (a Deadlock)
at java.lang.Thread.run(Thread.java:595)
"Low Memory Detector" daemon prio=6 tid=0x03c91188 nid=0xfe4 runnable [0x00000000..0x00000000]
"CompilerThread1" daemon prio=10 tid=0x03c8fe78 nid=0xfd4 waiting on condition [0x00000000..0x00000000]
"CompilerThread0" daemon prio=10 tid=0x00b1d460 nid=0xb00 waiting on condition [0x00000000..0x00000000]
"AdapterThread" daemon prio=10 tid=0x03c87ad0 nid=0xb50 waiting on condition [0x00000000..0x00000000]
"Signal Dispatcher" daemon prio=10 tid=0x03c8c5a8 nid=0xea4 runnable [0x00000000..0x00000000]
"Finalizer" daemon prio=8 tid=0x00b184e8 nid=0xef0 in Object.wait() [0x03c7f000..0x03c7fd9c]
at java.lang.Object.wait(Native Method)
- waiting on <0x179006e0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
- locked <0x179006e0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
"Reference Handler" daemon prio=10 tid=0x00b17458 nid=0xb0c in Object.wait() [0x03c3f000..0x03c3fa1c]
at java.lang.Object.wait(Native Method)
- waiting on <0x179005f0> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:474)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x179005f0> (a java.lang.ref.Reference$Lock)
"main" prio=6 tid=0x000359e0 nid=0xac8 waiting for monitor entry [0x0007f000..0x0007fbf8]
at Deadlock.main(Deadlock.java:25)
- waiting to lock <0x179411b0> (a Deadlock)
"VM Thread" prio=10 tid=0x00b151d0 nid=0x844 runnable
"GC task thread#0 (ParallelGC)" prio=6 tid=0x0003b578 nid=0xab8 runnable
"VM Periodic Task Thread" prio=10 tid=0x03c92a48 nid=0x84 waiting on condition
"RAS Control Thread" prio=10 tid=0x00b14fd0 nid=0xaa4 runnable
****************************************************************
Java Thread dump end
****************************************************************
-------------------------------------------------------------------------------
目次
索引
![]()
|