首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有死锁的Java线程挂起

没有死锁的Java线程挂起
EN

Stack Overflow用户
提问于 2014-06-09 19:05:24
回答 1查看 1.2K关注 0票数 4

我目前遇到了一些问题,一个过程是悬。

首先,下面的线程转储显示没有死锁。另一件有趣的事情是,进程挂在java.lang.System.identityHashCode方法中。当前该进程的CPU使用率为0%,有时达到1%的峰值。通常情况下,该过程使用100%。它使用的是1.7GB的RAM (这对于这个过程来说是正常的)。该机器有足够的CPU,磁盘空间和RAM可用。

代码语言:javascript
复制
Attaching to process ID 4146, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 23.7-b01
Deadlock Detection:

No deadlocks found.

Thread 12761: (state = BLOCKED)


Thread 4159: (state = BLOCKED)


Thread 4158: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
 - java.lang.ref.ReferenceQueue.remove(long) @bci=44, line=135 (Interpreted frame)
 - java.lang.ref.ReferenceQueue.remove() @bci=2, line=151 (Interpreted frame)
 - java.lang.ref.Finalizer$FinalizerThread.run() @bci=3, line=177 (Interpreted frame)


Thread 4157: (state = BLOCKED)
 - java.lang.Object.wait(long) @bci=0 (Interpreted frame)
 - java.lang.Object.wait() @bci=2, line=503 (Interpreted frame)
 - java.lang.ref.Reference$ReferenceHandler.run() @bci=46, line=133 (Interpreted frame)


Thread 4147: (state = IN_VM)
 - java.lang.System.identityHashCode(java.lang.Object) @bci=0 (Compiled frame; information may be imprecise)
 - java.util.IdentityHashMap.hash(java.lang.Object, int) @bci=1, line=301 (Compiled frame)
 - java.util.IdentityHashMap.containsKey(java.lang.Object) @bci=17, line=358 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=18, line=346 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.FastClonerArrayList.clone(java.lang.Object, com.rits.cloning.Cloner, java.util.Map) @bci=47, line=23 (Compiled frame)
 - com.rits.cloning.Cloner.fastClone(java.lang.Object, java.util.Map) @bci=30, line=96 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=100, line=355 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.FastClonerArrayList.clone(java.lang.Object, com.rits.cloning.Cloner, java.util.Map) @bci=47, line=23 (Compiled frame)
 - com.rits.cloning.Cloner.fastClone(java.lang.Object, java.util.Map) @bci=30, line=96 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=100, line=355 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.FastClonerArrayList.clone(java.lang.Object, com.rits.cloning.Cloner, java.util.Map) @bci=47, line=23 (Compiled frame)
 - com.rits.cloning.Cloner.fastClone(java.lang.Object, java.util.Map) @bci=30, line=96 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=100, line=355 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.FastClonerArrayList.clone(java.lang.Object, com.rits.cloning.Cloner, java.util.Map) @bci=47, line=23 (Compiled frame)
 - com.rits.cloning.Cloner.fastClone(java.lang.Object, java.util.Map) @bci=30, line=96 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=100, line=355 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.FastClonerArrayList.clone(java.lang.Object, com.rits.cloning.Cloner, java.util.Map) @bci=47, line=23 (Compiled frame)
 - com.rits.cloning.Cloner.fastClone(java.lang.Object, java.util.Map) @bci=30, line=96 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=100, line=355 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.cloneInternal(java.lang.Object, java.util.Map) @bci=368, line=404 (Compiled frame)
 - com.rits.cloning.Cloner.deepClone(java.lang.Object) @bci=61, line=309 (Compiled frame)
 - arquitetura.representation.Architecture.deepClone() @bci=23, line=497 (Compiled frame)
 - jmetal.operators.mutation.PLAFeatureMutation.execute(java.lang.Object) @bci=109, line=862 (Compiled frame)
 - jmetal.metaheuristics.nsgaII.NSGAII.execute() @bci=321, line=129 (Compiled frame)
 - br.ufpr.inf.opla.patterns.main.NSGAII_OPLA.main(java.lang.String[]) @bci=1116, line=179 (Interpreted frame)

我用不同的参数执行相同的进程,时间很长(超过一个星期)。我正在使用进化算法,所以对我的问题来说,时间消耗是正常的。我执行了120次相同的进程(有不同的参数),这个进程是第一个挂起的。目前有4个进程同时运行(计算挂起的一个),一些甚至更多的复杂需要更多的时间。他们正在完成,我的程序正在启动其他进程,通常使用ProcessBuilder。我读过每一篇文章的输出。挂起的过程在完成不到一半的时间内输出一个正常的日志。没有错误。另一件重要的事情是,冻结进程的方法不会产生输出,所以我假设在输出消耗方面没有问题。

我的问题是:我不想扼杀这个过程,那么有任何方法可以unhang这个过程吗?另外,为什么它处于IN_VM状态(在VirtualMachine中运行)而仍然被冻结?在java.lang.System.identityHashCode方法中冻结进程是否正常?为什么它要使用我CPU的0% (很少达到1%的峰值)?

如果我能帮助任何其他的信息,请直接问,我会很高兴在这里张贴。

提前谢谢。

编辑:虽然我使用多线程,但每个线程都使用ProcessBuilder启动一个ProcessBuilder对象。因此,挂起的进程是一个单独的JVM实例,只执行一个主线程。我将输出重定向到一个文件,但正如前面提到的,这个过程挂在一个不产生输出的方法上,所以我假设输出消耗没有问题。

EDIT2:扼杀了这个过程。随后的进程已经启动并正在顺利运行。

EN

回答 1

Stack Overflow用户

发布于 2014-12-28 12:56:46

这个过程没有悬念,你只是碰巧在上面发布的状态中发现了这个过程。您可以判断,因为所讨论的线程不像其他线程那样被阻塞,所以它处于正常执行中。

进程不再执行可能有不同的原因,但我可以向您保证,它们都没有与identityHashCode相关联,因为这是一个经过良好测试的内部Java函数。

着手:

  • 比较几个hangups的JVM状态。如果它始终与上面相同,则问题可能与散列生成相关。若否,则:
  • 张贴更多的相关代码,以便我们可以看看它。如果问题不在这一行代码中,则必须在其他地方(com.rits.cloning.Cloner听起来是开始查找的一个合理点)。
  • 告诉我们你想要归档什么,有人可能会发现一个bug或者更好的方法来完成它,这完全避免了引起问题的任何东西。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24127151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档