Ein drolliger dump der VM

takidoso

Erfahrenes Mitglied
Hallo und Halli,
es ist schon drollig, ich habe da doch ein Programm unter Java 5 gebaut was Dateien für die Weiterverarbeitung in einigermaßen paralleler Art und weise rumrangiert und dabei in der Lage ist andere Anwendung anzustoßen.
nun bekomme ich ganz urplötzlich eine Meldung auf der Solaris-Console, mit der ich nicht so ganz umzugehen weiß, da es offenbar hier nicht um eine Exception handelt.
Ich habe keine Ahnung was diese Meldung ausgelöst hat, noch ob ich dies als Problem werten muß. Es war recht sporadisch und eigetnlich zum erstenmal dass ich sowas sehe.
Sie kam nach einiger Zeit als das Programm eigetnlich nichts zu tun hatte.
hier die Meldung (es ist offenbar die liste der Threads)
Code:
Full thread dump Java HotSpot(TM) Server VM (1.5.0_07-b03 mixed mode):

"Thread-5" daemon prio=10 tid=0x088261f0 nid=0x24 waiting on condition [0xd2acd000..0xd2acdbb8]
        at java.lang.Thread.sleep(Native Method)
        at org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:103)

"Thread-4" daemon prio=10 tid=0x08825a58 nid=0x23 waiting on condition [0xd2ce5000..0xd2ce5a38]
        at java.lang.Thread.sleep(Native Method)
        at org.apache.log4j.helpers.FileWatchdog.run(FileWatchdog.java:103)

"pool-2-thread-5" prio=10 tid=0x08559ea8 nid=0x1e waiting on condition [0xd2d27000..0xd2d27cb8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-2-thread-4" prio=10 tid=0x08559198 nid=0x1d waiting on condition [0xd2d69000..0xd2d69b38]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-2-thread-3" prio=10 tid=0x08558348 nid=0x1c waiting on condition [0xd2dab000..0xd2dabbb8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-2-thread-2" prio=10 tid=0x08557168 nid=0x1b waiting on condition [0xd2ded000..0xd2dedab8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-2-thread-1" prio=10 tid=0x085565d8 nid=0x1a waiting on condition [0xd2e2f000..0xd2e2fd38]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-1-thread-5" prio=10 tid=0x085e94d8 nid=0x19 waiting on condition [0xd2e71000..0xd2e71c38]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-1-thread-4" prio=10 tid=0x085378a8 nid=0x18 waiting on condition [0xd2eb3000..0xd2eb3db8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-1-thread-3" prio=10 tid=0x08536cd8 nid=0x17 waiting on condition [0xd2ef5000..0xd2ef5b38]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-1-thread-2" prio=10 tid=0x0860c3d0 nid=0x16 waiting on condition [0xd2f37000..0xd2f37a38]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-1-thread-1" prio=10 tid=0x0860bf50 nid=0x15 waiting on condition [0xd2f79000..0xd2f79cb8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-3-thread-3" prio=10 tid=0x085ffef8 nid=0x14 waiting on condition [0xd2fbb000..0xd2fbba38]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-3-thread-2" prio=10 tid=0x085ff9e8 nid=0x13 waiting on condition [0xd2ffd000..0xd2ffdbb8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"pool-3-thread-1" prio=10 tid=0x085ff678 nid=0x12 waiting on condition [0xd32fd000..0xd32fdab8]
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:118)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1767)
        at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:359)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:470)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:674)
        at java.lang.Thread.run(Thread.java:595)

"Thread-3" prio=10 tid=0x084fdd48 nid=0x11 waiting on condition [0xd335f000..0xd335fd38]
        at java.lang.Thread.sleep(Native Method)
        at de.equens.filedemon.FileProcessorController.run(FileProcessorController.java:269)
        at java.lang.Thread.run(Thread.java:595)

"Thread-2" prio=10 tid=0x084fd9a8 nid=0x10 waiting on condition [0xd33a1000..0xd33a1c38]
        at java.lang.Thread.sleep(Native Method)
        at de.equens.filedemon.FileProcessorController.run(FileProcessorController.java:269)
        at java.lang.Thread.run(Thread.java:595)

"Thread-1" prio=10 tid=0x084ecb58 nid=0xf waiting on condition [0xd33e3000..0xd33e3db8]
        at java.lang.Thread.sleep(Native Method)
        at de.equens.filedemon.FileProcessorController.run(FileProcessorController.java:269)
        at java.lang.Thread.run(Thread.java:595)

"Low Memory Detector" daemon prio=10 tid=0x081a1268 nid=0xd runnable [0x00000000..0x00000000]

"CompilerThread1" daemon prio=10 tid=0x0819f9f8 nid=0xc waiting on condition [0x00000000..0xd3d36f4c]

"CompilerThread0" daemon prio=10 tid=0x0819eb08 nid=0xb waiting on condition [0x00000000..0xd3d78dd4]

"AdapterThread" daemon prio=10 tid=0x0819dd80 nid=0xa waiting on condition [0x00000000..0x00000000]

"Signal Dispatcher" daemon prio=10 tid=0x0819cff0 nid=0x9 waiting on condition [0x00000000..0x00000000]

"Finalizer" daemon prio=10 tid=0x08190830 nid=0x8 in Object.wait() [0xf8051000..0xf8051db8]
        at java.lang.Object.wait(Native Method)
        - waiting on <0xd7f27ca8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0xd7f27ca8> (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=0x08190340 nid=0x7 in Object.wait() [0xf8093000..0xf8093c38]
        at java.lang.Object.wait(Native Method)
        - waiting on <0xd7f1fcc8> (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 <0xd7f1fcc8> (a java.lang.ref.Reference$Lock)

"main" prio=10 tid=0x08074c18 nid=0x1 waiting on condition [0x08046000..0x08046f44]
        at java.lang.Thread.sleep(Native Method)
        at de.equens.filedemon.FileDemon.run(FileDemon.java:270)
        at de.equens.filedemon.FileDemon.main(FileDemon.java:520)

"VM Thread" prio=10 tid=0x0818e268 nid=0x6 runnable

"GC task thread#0 (ParallelGC)" prio=10 tid=0x080f5fe0 nid=0x2 runnable

"GC task thread#1 (ParallelGC)" prio=10 tid=0x080f6a20 nid=0x3 runnable

"GC task thread#2 (ParallelGC)" prio=10 tid=0x080f7460 nid=0x4 runnable

"GC task thread#3 (ParallelGC)" prio=10 tid=0x080f7ea0 nid=0x5 runnable

"VM Periodic Task Thread" prio=10 tid=0x081a2eb0 nid=0xe waiting on condition

Habt ihr sowas schon mal erlebt, und was hat das genaues zu bedeuten?

Für Eure Meinung und Erfahrungsaustausch echt dankbar

Takidoso
 
Hallo,

das ist ein hundsgewöhnlicher Thread dump der JVM, der Auskunft darüber gibt was die einzelnen Threads (zum Zeitpunkt der Dumperstellung gerade so tun).

Das kannst du in der Windows-Konsole über Ctrl + Shift + Break erzeugen.
Eine andere Möglichkeit wäre dann noch die JConsole über den Tab MBeans -> Threading -> Operations -> dumpAllThreads ...
Unter Unix / Linux kannst du einen thread dump via kill -3 <jvm process id> erzeugen.

Wahrscheinlich war einfach jemand so lustig und hast eine der genannten Aktionen ausgeführt.

Gruß Tom
 
Ja es ist ein gewöhnlicher thread dump, nur ich hatte ihn bisher nie gesehen und was daran besonders drollig war ist, dass das Programm danach weiterlief und ich es regülär habe stoppen können. Und das ist etwas was ich nicht so ganz verstehe.
Ich gehe davon aus, dass es vermutlich sowas war wie Du erwähnt hattest. Und tuhe dies unter die Rubrik -> drolliges aber nicht bedrohliches.

hab Dank für den Hinweis

Takidoso
 
Hallo,

also ein thread dump sollte keiner Anwendung weh tun ;-) Insofern ists eigentlich ziemlich normal das deine Anwendung danach weiterlief :)

Gruß Tom
 
Da habe ich glatt was neues gelernt, Ich kannte diese Thread-dumps und die Möglichkeit Sie auszulösen noch gar nicht, super! :)
Jetzt stellt sich mir jedoch die Frage gibt es das schon lange und ab ca welcher Java-Version gab es das?

Takidoso
 
Hi Thomas,
weißt Du zufällig wie ich in Eclipse an einen solchen Thread-dump komme, ich meine im laufenden Betrieb und nicht im Debug-Mode.
 
Hallo,

also auch wenn der andere Java Prozess aus Eclipse heraus gestartet wurde gibts mehrere Möglichkeiten einen Thread-Dump ausgeben zu lassen.
1) Bei Java 1.4 / Java 5, Java 6 -> Sendsignal.exe ( http://www.latenighthacking.com/projects/2003/sendSignal/ )
2) Bei Java 5 und Java 6 per JConsole über den MBeans Tab (siehe oben) -> Bei Java 5 muss die JVM dazu mit -Dcom.sun.management.jmx gestartet worden sein, bei Java 6 ist das JMX Subsystem per default aktiv.
3) Unter Java 5 / Java 6 mit dem tool jps die verfügbaren Java Prozessid's ermitteln und dann via jstack PID den Thread Dump auslösen.

Gruß Tom
 
Zurück