相关疑难解决方法(0)

在sun.misc.Unsafe.park等待(原生方法)

我的一个应用程序在负载运行的一段时间内挂起,是否有人知道在jstack中可能导致此类输出的原因:

"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)
Run Code Online (Sandbox Code Playgroud)

当它挂起时,我在jstack输出中看到了很多.

我大量使用Spring @Async和地图,同步地图和ehcache.

有趣的是,这只发生在一个app实例上.另外两个人跑得很好.还有什么我可以调查以获得更多细节?

我发现这篇文章/sf/ask/1679495121/,但在我的情况下它并不是很有用.

java concurrency multithreading java.util.concurrent

65
推荐指数
2
解决办法
8万
查看次数

如何检测被IO阻塞的线程?

在Java中,线程可以具有不同的状态:

NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED

但是,当线程被IO阻塞时,其状态为"RUNNABLE".如何判断它是否被IO阻止?

java multithreading

7
推荐指数
1
解决办法
3301
查看次数