我最近使用 jvisualvm 和 jstack 来分析Java 8u20 tomcat核心转储。对于大多数线程,我能够看到完整的堆栈跟踪,例如
Thread 21234: (state = BLOCKED)
- sun.misc.Unsafe.park(boolean, long) ...
但对于当前线程(导致核心转储的线程),没有堆栈跟踪,我看到的只有:
Thread 28888: (state = IN_JAVA)
我找到了IN_JAVA
的以下解释:
NEW
:刚开始,即正在初始化。IN_NATIVE
:以原生代码运行。IN_NATIVE_TRANS
:对应的过渡状态。IN_VM
:在VM中运行。IN_VM_TRANS
:对应的过渡状态。IN_JAVA
:使用Java或存根代码运行。BLOCKED
:在vm中被阻止。BLOCKED_TRANS
:对应的过渡状态。 he_err
日志显示java中调用VM本机代码的方法,但我对java端堆栈的其余部分感兴趣。
对于为什么会这样做的任何想法都会非常感激!