问题描述
我使用带有和不带有 -F
标志的 jstack 实用程序在同一个 jvm (java8) 上背靠背进行了两个线程转储。以下是两个线程转储的 JVM 线程状态 -
命令:jstack -F <p_id>
329 个线程:289 个被阻止,40 个 IN_NATIVE
命令:jstack <p_id>
337 个线程:157 个 WAITING、132 个 TIMED_WAITING、48 个 RUNNABLE
当我遇到时,有两组java线程状态-
NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED
doc
NEW,NEW_TRANS,IN_NATIVE,IN_NATIVE_TRANS,IN_VM,IN_VM_TRANS,IN_JAVA,IN_JAVA_TRANS,BLOCKED_TRANS
doc
以下是基于上述观察的几个问题 -
-
两组java线程状态之间的相关性是什么,它们在什么情况下有用?我是否应该将 WAITING & TIMED_WAITING 线程状态视为 BLOCKED?
-
两个线程转储有不同类型的线程状态,原因是什么?
-
当 jvm 进程响应时,我应该不使用
-F
标志吗? jvm doc
注意:第一个线程转储是用 -F 标志收集的,几秒钟后下一个线程转储被收集而没有 -F 标志。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)