我最近使用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
: 在虚拟机中运行。IN_VM_TRANS
: 对应的过渡状态。IN_JAVA
: 在 Java 或存根代码中运行。BLOCKED
: 在 vm 中被阻止。BLOCKED_TRANS
: 对应的过渡状态。
日志显示了从 java 调用 VM 本机代码的he_err
方法,但我对 java 端堆栈的其余部分感兴趣。
任何关于为什么会这样的想法将不胜感激!