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 **************************************************************** -------------------------------------------------------------------------------
目次
索引
![]() ![]() |