A thread dump is printed if the Java process
receives a SIGQUIT signal. Therefore, issuing
the command kill -3 <pid> causes the process with id <pid> to
print a thread dump to its standard output. The application continues
processing after the thread information is printed.
In addition to the thread stacks, the ctrl-break
handler also executes a deadlock detection algorithm. If any deadlocks
are detected, the ctrl-break handler also prints out additional information
on each deadlocked thread. The SIGQUIT signal
can also be used to print heap dump information when using the -XX:+HeapDump or -XX:+HeapDumpOnCtrlBreak options described further on in this chapter.
The following example shows the output generated
when SIGQUIT is sent to a running Java process:
 |
Full thread dump [Thu Oct 12 14:00:56 PDT 2006] (Java HotSpot(TM) Server
VM 1.5.0.03 jinteg:02.13.06-21:25 IA64 mixed mode):
"Thread-3" prio=10 tid=00a78480 nid=24 lwp_id=2669798 runnable [0bfc0000..0bfc0ae0]
at java.lang.Math.log(Native Method)
at spec.jbb.JBButil.negativeExpDistribution(JBButil.java:795)
at spec.jbb.TransactionManager.go(TransactionManager.java:234)
at spec.jbb.JBBmain.run(JBBmain.java:258)
at java.lang.Thread.run(Thread.java:595)
"Thread-2" prio=2 tid=009fb7a0 nid=23 lwp_id=2669797 runnable [0c1c0000..0c1c0b60]
at spec.jbb.Order.dateOrderlines(Order.java:341)
- waiting to lock <444ba618> (a spec.jbb.Order)
at spec.jbb.DeliveryTransaction.process(DeliveryTransaction.java:213)
at spec.jbb.DeliveryHandler.handleDelivery(DeliveryHandler.java:103)
at spec.jbb.DeliveryTransaction.queue(DeliveryTransaction.java:363)
- locked <154927e8> (a spec.jbb.DeliveryTransaction)
at spec.jbb.TransactionManager.go(TransactionManager.java:431)
at spec.jbb.JBBmain.run(JBBmain.java:258)
at java.lang.Thread.run(Thread.java:595)
"Thread-1" prio=10 tid=008ffa80 nid=22 lwp_id=2669796 runnable [0c3c0000..0c3c0de0]
at spec.jbb.infra.Collections.longStaticBTree.get(longStaticBTree.java:1346)
at spec.jbb.Warehouse.retrieveStock(Warehouse.java:307)
at spec.jbb.Orderline.validateAndProcess(Orderline.java:341)
- locked <48563610> (a spec.jbb.Orderline)
at spec.jbb.Order.processLines(Order.java:289)
- locked <48563128> (a spec.jbb.Order)
at spec.jbb.NewOrderTransaction.process(NewOrderTransaction.java:282)
at spec.jbb.TransactionManager.go(TransactionManager.java:278)
at spec.jbb.JBBmain.run(JBBmain.java:258)
at java.lang.Thread.run(Thread.java:595)
"Thread-0" prio=2 tid=00781240 nid=21 lwp_id=2669795 runnable [0c5c0000..0c5c0e60]
at spec.jbb.infra.Util.DisplayScreen.privIntLeadingZeros(DisplayScreen.java:448)
at spec.jbb.infra.Util.DisplayScreen.putDollars(DisplayScreen.java:1214)
at spec.jbb.NewOrderTransaction.secondDisplay(NewOrderTransaction.java:416)
- locked <154d4828> (a spec.jbb.NewOrderTransaction)
at spec.jbb.TransactionManager.go(TransactionManager.java:279)
at spec.jbb.JBBmain.run(JBBmain.java:258)
at java.lang.Thread.run(Thread.java:595)
"Low Memory Detector" daemon prio=10 tid=00778b80 nid=19 lwp_id=2669774 runnable [00000000..00000000]
"CompilerThread1" daemon prio=10 tid=00772c30 nid=17 lwp_id=2669772 waiting on condition [00000000..0a7ff728]
"CompilerThread0" daemon prio=10 tid=007703f0 nid=16 lwp_id=2669771 waiting on condition [00000000..0afff5b8]
"AdapterThread" daemon prio=10 tid=0076c8d0 nid=15 lwp_id=2669770 waiting on condition [00000000..00000000]
"Signal Dispatcher" daemon prio=10 tid=0076a2e0 nid=14 lwp_id=2669769 waiting on condition [00000000..00000000]
"Finalizer" daemon prio=10 tid=00530a60 nid=13 lwp_id=2669768 in Object.wait() [750c0000..750c0e60]
at java.lang.Object.wait(Native Method)
- waiting on <11000100> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
- locked <11000100> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:197)
"Reference Handler" daemon prio=10 tid=0052de80 nid=12 lwp_id=2669767 in Object.wait() [752c0000..752c0ce0]
at java.lang.Object.wait(Native Method)
- waiting on <11003dc8> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:474)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:123)
- locked <11003dc8> (a java.lang.ref.Reference$Lock)
"main" prio=8 tid=0047dc90 nid=1 lwp_id=-1 waiting on condition [7fffd000..7fffe398]
at java.lang.Thread.sleep(Native Method)
at spec.jbb.JBButil.SecondsToSleep(JBButil.java:740)
at spec.jbb.Company.displayResultTotals(Company.java:942)
at spec.jbb.JBBmain.DoARun(JBBmain.java:387)
at spec.jbb.JBBmain.DOIT(JBBmain.java:1137)
at spec.jbb.JBBmain.main(JBBmain.java:1490)
"VM Thread" prio=10 tid=004ff510 nid=11 lwp_id=2669766 runnable
"GC task thread#0 (ParallelGC)" prio=10 tid=004d0520 nid=3 lwp_id=2669758 runnable
"GC task thread#1 (ParallelGC)" prio=10 tid=004d0600 nid=4 lwp_id=2669759 runnable
"GC task thread#2 (ParallelGC)" prio=10 tid=004d06e0 nid=5 lwp_id=2669760 runnable
"GC task thread#3 (ParallelGC)"prio=10 tid=004d07c0 nid=6 lwp_id=2669761 runnable
"GC task thread#4 (ParallelGC)" prio=10 tid=004d08a0 nid=7 lwp_id=2669762 runnable
"GC task thread#5 (ParallelGC)" prio=10 tid=004d0980 nid=8 lwp_id=2669763 runnable
"GC task thread#6 (ParallelGC)" prio=10 tid=004d0a60 nid=9 lwp_id=2669764 runnable
"GC task thread#7 (ParallelGC)" prio=10 tid=004d0b40 nid=10 lwp_id=2669765 runnable
"VM Periodic Task Thread" prio=8 tid=00500ad0 nid=18 lwp_id=2669773 waiting on condition |
 |