简体   繁体   中英

JStack find blocking reason

I debug a JavaFx application which is getting a locked black screen ( does not react any more ) and high CPU usage.

It may be a hidden locking window or something related to modal dialogs. There is also an installer written in Swing which shows its own dialogs if new updates are comming, maybe this is conflicting with JavaFx ?

How may I find from the jstack output which is the reason ?

The application is using OpenJDK 11.

C:\Users\dprutean>jstack -m 9244
Error: -m option used
Cannot connect to core dump or remote debug server. Use jhsdb jstack instead

C:\Users\dprutean>jstack  9244
2020-01-14 08:03:11
Full thread dump OpenJDK 64-Bit Client VM (13+33 mixed mode):

Threads class SMR info:
_java_thread_list=0x0000000066bcb920, length=25, elements={
0x000000000394d000, 0x0000000003557000, 0x000000000357a800, 0x00000000035b3000,
0x00000000035b4800, 0x00000000035b6800, 0x00000000035b7800, 0x000000004d844000,
0x000000004d9aa800, 0x0000000055e65800, 0x0000000055e89800, 0x00000000560b8800,
0x0000000056447800, 0x00000000564cb800, 0x00000000564ae800, 0x00000000580a3000,
0x00000000582ab000, 0x00000000582a7000, 0x00000000582a6800, 0x00000000582ac800,
0x00000000582ad800, 0x00000000582aa000, 0x00000000582a8800, 0x00000000582a9800,
0x0000000067459000
}

"main" #1 prio=5 os_prio=0 cpu=468.75ms elapsed=43898.09s tid=0x000000000394d000 nid=0x6c4 waiting on condition  [0x000000000312d000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x00000000226c3cb8> (a java.util.concurrent.CountDownLatch$Sync)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(java.base@13/AbstractQueuedSynchronizer.java:885)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(java.base@13/AbstractQueuedSynchronizer.java:1039)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(java.base@13/AbstractQueuedSynchronizer.java:1345)
        at java.util.concurrent.CountDownLatch.await(java.base@13/CountDownLatch.java:232)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:213)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:156)
        at javafx.application.Application.launch(Application.java:227)
        at com.wisecoders.dbs.DbSchema.main(DbSchema.java:62)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@13/Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@13/NativeMethodAccessorImpl.java:62)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@13/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@13/Method.java:567)
        at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85)
        at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94)
        at com.install4j.runtime.launcher.WinLauncher.main(WinLauncher.java:25)

"Reference Handler" #2 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=43898.03s tid=0x0000000003557000 nid=0x4498 waiting on condition  [0x000000000389f000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.ref.Reference.waitForReferencePendingList(java.base@13/Native Method)
        at java.lang.ref.Reference.processPendingReferences(java.base@13/Reference.java:241)
        at java.lang.ref.Reference$ReferenceHandler.run(java.base@13/Reference.java:213)

"Finalizer" #3 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=43898.03s tid=0x000000000357a800 nid=0x586c in Object.wait()  [0x000000004d2ff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:155)
        - locked <0x0000000021f5dbd8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:176)
        at java.lang.ref.Finalizer$FinalizerThread.run(java.base@13/Finalizer.java:170)

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=43898.02s tid=0x00000000035b3000 nid=0x62f8 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" #5 daemon prio=5 os_prio=2 cpu=0.00ms elapsed=43898.02s tid=0x00000000035b4800 nid=0x6968 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C1 CompilerThread0" #6 daemon prio=9 os_prio=2 cpu=8578.13ms elapsed=43898.02s tid=0x00000000035b6800 nid=0x1ff8 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"Sweeper thread" #7 daemon prio=9 os_prio=2 cpu=7546.88ms elapsed=43898.02s tid=0x00000000035b7800 nid=0x11c0 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #8 daemon prio=9 os_prio=0 cpu=15.63ms elapsed=43898.00s tid=0x000000004d844000 nid=0x6134 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Common-Cleaner" #9 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=43897.96s tid=0x000000004d9aa800 nid=0x2444 in Object.wait()  [0x000000004e02f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:155)
        - locked <0x0000000021fea588> (a java.lang.ref.ReferenceQueue$Lock)
        at jdk.internal.ref.CleanerImpl.run(java.base@13/CleanerImpl.java:148)
        at java.lang.Thread.run(java.base@13/Thread.java:830)
        at jdk.internal.misc.InnocuousThread.run(java.base@13/InnocuousThread.java:134)

"Java2D Disposer" #10 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=43896.89s tid=0x0000000055e65800 nid=0x670c in Object.wait()  [0x000000005675f000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:155)
        - locked <0x000000002244e758> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:176)
        at sun.java2d.Disposer.run(java.desktop@13/Disposer.java:144)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"AWT-Windows" #12 daemon prio=6 os_prio=0 cpu=0.00ms elapsed=43896.85s tid=0x0000000055e89800 nid=0x50ac runnable  [0x0000000056b5e000]
   java.lang.Thread.State: RUNNABLE
        at sun.awt.windows.WToolkit.eventLoop(java.desktop@13/Native Method)
        at sun.awt.windows.WToolkit.run(java.desktop@13/WToolkit.java:312)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"JavaFX-Launcher" #16 prio=5 os_prio=0 cpu=296.88ms elapsed=43896.53s tid=0x00000000560b8800 nid=0x4494 waiting on condition  [0x0000000057abf000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x00000000227025c0> (a java.util.concurrent.CountDownLatch$Sync)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(java.base@13/AbstractQueuedSynchronizer.java:885)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(java.base@13/AbstractQueuedSynchronizer.java:1039)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(java.base@13/AbstractQueuedSynchronizer.java:1345)
        at java.util.concurrent.CountDownLatch.await(java.base@13/CountDownLatch.java:232)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:856)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at com.sun.javafx.application.LauncherImpl$$Lambda$160/0x00000000575c7500.run(Unknown Source)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"QuantumRenderer-0" #17 daemon prio=5 os_prio=0 cpu=664781.25ms elapsed=43896.27s tid=0x0000000056447800 nid=0xaa8 runnable  [0x0000000057f1e000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x00000000226c44a0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@13/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@13/LinkedBlockingQueue.java:433)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@13/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@13/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@13/ThreadPoolExecutor.java:628)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"InvokeLaterDispatcher" #19 daemon prio=5 os_prio=0 cpu=903656.25ms elapsed=43896.21s tid=0x00000000564cb800 nid=0x5514 in Object.wait()  [0x0000000058fff000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait(java.base@13/Object.java:326)
        at com.sun.glass.ui.InvokeLaterDispatcher.run(InvokeLaterDispatcher.java:127)
        - locked <0x00000000226c47f8> (a java.lang.StringBuilder)

"JavaFX Application Thread" #20 prio=5 os_prio=0 cpu=1590890.63ms elapsed=43896.21s tid=0x00000000564ae800 nid=0xb94 runnable  [0x00000000590fe000]
   java.lang.Thread.State: RUNNABLE
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
        at com.sun.glass.ui.win.WinApplication$$Lambda$202/0x0000000057b674a8.run(Unknown Source)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"Thread-2" #21 daemon prio=5 os_prio=0 cpu=12703.13ms elapsed=43896.15s tid=0x00000000580a3000 nid=0x28f0 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Prism Font Disposer" #22 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=43895.38s tid=0x00000000582ab000 nid=0x4bf0 in Object.wait()  [0x00000000613bf000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:155)
        - locked <0x000000002298ecb0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:176)
        at com.sun.javafx.font.Disposer.run(Disposer.java:93)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"pool-4-thread-1" #25 prio=5 os_prio=0 cpu=937.50ms elapsed=43894.26s tid=0x00000000582a7000 nid=0x41b0 waiting on condition  [0x000000005714f000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x00000000233fab90> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@13/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@13/LinkedBlockingQueue.java:433)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@13/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@13/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@13/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"pool-2-thread-1" #26 prio=5 os_prio=0 cpu=0.00ms elapsed=43894.26s tid=0x00000000582a6800 nid=0x4bc4 waiting on condition  [0x000000005724f000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x0000000022b2e718> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@13/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@13/LinkedBlockingQueue.java:433)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@13/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@13/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@13/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"Cleaner-0" #30 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=43893.73s tid=0x00000000582ac800 nid=0x59cc in Object.wait()  [0x000000006395e000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:155)
        - locked <0x00000000232a2c60> (a java.lang.ref.ReferenceQueue$Lock)
        at jdk.internal.ref.CleanerImpl.run(java.base@13/CleanerImpl.java:148)
        at java.lang.Thread.run(java.base@13/Thread.java:830)
        at jdk.internal.misc.InnocuousThread.run(java.base@13/InnocuousThread.java:134)

"mysql-cj-abandoned-connection-cleanup" #31 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=43893.28s tid=0x00000000582ad800 nid=0xf10 in Object.wait()  [0x0000000063c5e000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:155)
        - locked <0x0000000023527618> (a java.lang.ref.ReferenceQueue$Lock)
        at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:85)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@13/ThreadPoolExecutor.java:1128)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@13/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"mysql-cj-abandoned-connection-cleanup" #32 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=43893.15s tid=0x00000000582aa000 nid=0x1cf8 in Object.wait()  [0x0000000065d5e000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@13/Native Method)
        - waiting on <no object reference available>
        at java.lang.ref.ReferenceQueue.remove(java.base@13/ReferenceQueue.java:155)
        - locked <0x00000000237ccbd8> (a java.lang.ref.ReferenceQueue$Lock)
        at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:85)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@13/ThreadPoolExecutor.java:1128)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@13/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"TimerQueue" #33 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=43892.89s tid=0x00000000582a8800 nid=0x597c waiting on condition  [0x000000006605e000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x00000000237cce78> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@13/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.DelayQueue.take(java.base@13/DelayQueue.java:217)
        at javax.swing.TimerQueue.run(java.desktop@13/TimerQueue.java:171)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"DbSchema: Reverse engineering pre-fetch" #42 prio=5 os_prio=0 cpu=890.63ms elapsed=43885.08s tid=0x00000000582a9800 nid=0x2cf8 waiting on condition  [0x00000000579bf000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x0000000022b2e718> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@13/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@13/LinkedBlockingQueue.java:433)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@13/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@13/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@13/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"DbSchema: Browse Task" #50 prio=5 os_prio=0 cpu=312.50ms elapsed=43855.36s tid=0x0000000067459000 nid=0x5f98 waiting on condition  [0x000000005734f000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@13/Native Method)
        - parking to wait for  <0x0000000022b2e718> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@13/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@13/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@13/LinkedBlockingQueue.java:433)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@13/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@13/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@13/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@13/Thread.java:830)

"VM Thread" os_prio=2 cpu=11859.38ms elapsed=43898.04s tid=0x0000000003553000 nid=0x4d64 runnable

"VM Periodic Task Thread" os_prio=2 cpu=31.25ms elapsed=43898.00s tid=0x000000004d844800 nid=0x6950 waiting on condition

JNI global refs: 116, weak refs: 14

似乎名为“JavaFX 应用程序线程”的线程具有循环执行,导致 CPU 使用率过高。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM