我在构建服务器上有一个间歇性问题,其中构建中的Java进程无法终止并且似乎永远运行(使用100%的CPU)永远(我已经看到它在周末运行了2天以上通常需要大约10分钟)。 kill -9 pid
似乎是阻止这一过程的唯一方法。
我试过打电话 kill -QUIT pid
在这个过程中,它似乎没有产生任何到STDOUT的堆栈跟踪(也许它没有响应信号?)。没有-F force选项的jstack似乎无法连接到正在运行的JVM,但是使用force选项它会产生下面包含的输出。
不幸的是,即使有了堆栈跟踪,我也看不到任何明显的进一步调查路径。
据我所知,它显示了两个运行Object.wait的'BLOCKED'线程(它们的堆栈似乎只包含核心Java代码,不包含我们的代码)和第三个没有堆栈输出的'IN_VM'。
我应采取哪些步骤来收集有关问题原因的更多信息(或者更好,我该如何解决)?
$ /opt/jdk1.6.0_29/bin/jstack -l -F 5546 正在处理ID 5546,请等待...... 调试器连接成功。 服务器编译检测到 JVM版本是20.4-b02 死锁检测: 没有找到死锁。 使用Printezis位查找对象大小并跳过... 线程5555 :( state = BLOCKED) 锁定可拥有的同步器: - 没有 线程5554 :(状态=阻塞) - java.lang.Object.wait(long)@ bci = 0(解释框架) - java.lang.ref.ReferenceQueue.remove(long)@ bci = 44,line = 118(解释框) - java.lang.ref.ReferenceQueue.remove()@ bci = 2,line = 134(解释框架) - java.lang.ref.Finalizer $ FinalizerThread.run()@ bci = 3,line = 159(解释框架) 锁定可拥有的同步器: - 没有 线程5553 :(状态=阻塞) - java.lang.Object.wait(long)@ bci = 0(解释框架) - java.lang.Object.wait()@ bci = 2,line = 485(解释框架) - java.lang.ref.Reference $ ReferenceHandler.run()@ bci = 46,line = 116(解释框架) 锁定可拥有的同步器: - 没有 线程5548:(state = IN_VM) 锁定可拥有的同步器: - 没有
(Java版本1.6.0更新29,在Scientific Linux 6.0版上运行)
更新:
运行 strace -f -p 894
产生了看似无穷无尽的......
[pid 900] sched_yield() = 0
[pid 900] sched_yield() = 0
...
然后当Ctrl-Cd时
Process 894 detached
...
Process 900 detached
...
Process 909 detached
jmap -histo 894
没有连接但是 jmap -F -histo 894
返回...
正在处理ID 894,请等待...... 调试器连接成功。 服务器编译检测到 JVM版本是20.4-b02 迭代堆。可能还要等一下... 使用Printezis位查找对象大小并跳过... 使用Printezis位查找对象大小并跳过... 物体直方图: num #instances #bytes类描述 -------------------------------------------------- ------------------------ 1:11356 1551744 * MethodKlass 2:11356 1435944 * ConstMethodKlass 3:914 973488 * ConstantPoolKlass 4:6717 849032 char [] 5:16987 820072 * SymbolKlass 6:2305 686048 byte [] 7:914 672792 * InstanceKlassKlass 8:857 650312 * ConstantPoolCacheKlass 9:5243 167776 java.lang.String 10:1046 108784 java.lang.Class 11:1400 87576短[] 12:1556 84040 *系统ObjArray 13:1037 64584 int [] 14:103 60152 * ObjArrayKlassKlass 15:622 54736 java.lang.reflect.Method 16:1102 49760 java.lang.Object [] 17:937 37480 java.util.TreeMap $ Entry 18:332 27960 java.util.HashMap $ Entry [] 19:579 27792 java.nio.HeapByteBuffer 20:578 27744 java.nio.HeapCharBuffer 21:1021 24504 java.lang.StringBuilder 22:1158 24176 java.lang.Class [] 23:721 23072 java.util.HashMap $ Entry 24:434 20832 java.util.TreeMap 25:689 18936 java.lang.String [] 26:238 17440 java.lang.reflect.Method [] 27:29 16800 * MethodDataKlass 28:204 14688 java.lang.reflect.Field 29:330 13200 java.util.LinkedHashMap $ Entry 30:264 12672 java.util.HashMap ... 585:1 16 java.util.LinkedHashSet 586:1 16 sun.rmi.runtime.NewThreadAction $ 2 587:1 16 java.util.Hashtable $ EmptyIterator 588:1 16 java.util.Collections $ EmptySet 总计:79700 8894800 堆遍历耗时1.288秒。