Eine meiner Anwendungen hängt unter einer gewissen Zeit unter Last. Weiß jemand, was eine solche Ausgabe in jstack verursachen könnte:
"scheduler-5" prio=10 tid=0x00007f49481d0000 nid=0x2061 waiting on condition [0x00007f494e8d0000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006ee117310> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1085)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Ich sehe dies oft in der jstack-Ausgabe, wenn sie hängt.
Ich benutze Spring @Async & Maps, synchronisierte Maps & Ehcache.
Interessant ist, dass dies nur auf einer der App-Instanzen geschieht. Zwei andere laufen einwandfrei. Was könnte ich sonst noch untersuchen, um in einem solchen Fall mehr Details zu erhalten?
Ich fand diesen Beitrag /programming/23992787/parking-to-wait-for-0xd8cf0070-a-java-util-concurrent-locks-abstractqueueds, aber er ist in meinem Fall nicht sehr nützlich.
waiting
wahrscheinlich die meiste Zeit sein wird. Du solltest woanders suchen. Das Warten hier verbraucht keine CPU und würde keine weiteren Leistungsprobleme verursachen.