当前位置: 首页 > 面试题库 >

在sun.misc.Unsafe.park(本机方法)中等待

西门建安
2023-03-14
问题内容

我的一个应用程序在负载下运行一段时间后挂起,有人知道是什么会导致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)

我在挂起的jstack输出中看到了很多。

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

有趣的是,这仅发生在一个应用实例上。另外两个运行得很好。在这种情况下,我还能进行哪些调查以获取更多详细信息?


问题答案:

unsafe.park与thread.wait几乎相同,除了它使用的是体系结构特定的代码(因此它是“不安全的”)。unsafe不会公开提供,但是会在Java内部库中使用,在Java内部库中,特定于体系结构的代码将提供明显的优化好处。它在线程池中使用了很多。

因此,要回答您的问题,线程正在做的就是等待某件事,它实际上并没有使用任何CPU。考虑到原始堆栈跟踪表明您正在使用锁,因此我认为您遇到的情况是死锁一直在发生。

是的,我知道您几乎可以肯定已经解决了这个问题。但是,如果有人用Google搜索sun.misc.unsafe.park,您将是最高的搜索结果之一。我认为回答这个问题可能会帮助其他人了解这种似乎正在使用其所有CPU的方法。



 类似资料:
  • 我的一个应用程序在负载下运行了一段时间后挂起,有人知道在JStack中是什么导致了这样的输出吗:

  • 我还发现这个帖子在sun.misc.unsafe.park(本地方法)等待,但它对我的情况没有帮助。 在这种情况下,我还可以调查什么来获得更多细节?

  • 问题内容: 我将某些本机方法重写为常规Java方法。 本机方法有效地静态吗?或者是否曾经有一个隐式的“ this”参数? 谢谢! 问题答案: 就像常规Java方法一样,本机方法可以是非方法。 非本机方法接收引用,而非本机方法则接收对containg类的引用。 根据JNI规范: 本机方法参数 JNI接口指针是本机方法的第一个参数。JNI接口指针的类型为JNIEnv。第二个参数根据本机方法是静态还是静

  • 安装react native navigation后,我想重建它。构建失败。 失败:构建失败,有一个异常。 出了什么问题: 无法解析配置的所有文件:app: dedegCompileClasspath。 无法解析com.aurelhubert: ahbotom导航: 2.0.6。 需要: project: app > 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--

  • 问题内容: 我有一个带有本机函数的小型JNI文件,该函数将char数组转换为字节数组(因此我可以将其发送到我的C ++客户端)。 定义如下: 软件包名称(加载库的位置是: 并且该类中的本机deffiniton如下: 但是当调用ConvertString函数时,我得到以下错误: 问题可能是该类(communicationmoduleTCPIP)是可运行的类吗?我不在类中运行,并且具有以下定义(当我注

  • 我已经翻阅了这里所有关于这个主题的其他帖子,但没有一个对我有帮助。 我使用的是一个第三方SDK(oovoo),它包含一个.jar文件和.so文件(armeabi-v7a) null 谢谢! android studio版本0.8.6 gradle版本1.12 Ooovoo版本1.2.4