【发布时间】:2009-12-01 17:01:48
【问题描述】:
Java 线程始终处于以下十种状态之一:
NEW: Just starting up, i.e., in process of being initialized.
NEW_TRANS: Corresponding transition state (not used, included for completness).
IN_NATIVE: Running in native code.
IN_NATIVE_TRANS: Corresponding transition state.
IN_VM: Running in VM.
IN_VM_TRANS: Corresponding transition state.
IN_JAVA: Running in Java or in stub code.
IN_JAVA_TRANS: Corresponding transition state (not used, included for completness).
BLOCKED: Blocked in vm.
BLOCKED_TRANS: Corresponding transition state.
未使用状态 (UNINITIALIZED) 已从列表中省略。
虽然上面给出了状态的定义,但我正在寻找“经验法则”来解释正在运行的应用服务器的给定线程状态设置。而且,更具体地说:
假设一个实时应用服务器在不同时间点具有以下线程统计信息(使用jstack 获得):
- 100 个线程:35 个
BLOCKED,65 个IN_NATIVE - 113 个线程:35 个
BLOCKED、77 个IN_NATIVE、1 个IN_VM - 52 个线程:38 个
BLOCKED、1 个IN_JAVA、6 个IN_NATIVE、7 个IN_VM - 120 个线程:39 个
BLOCKED、1 个IN_JAVA、80 个IN_NATIVE - 94 个线程:34 个
BLOCKED,59 个IN_NATIVE,1 个IN_NATIVE_TRANS
对于五个统计数据中的每个线程 - 关于整体 JVM 状态可以推断出什么? 即“在这种情况下,JVM 看起来正在空闲等待请求”、“机器正忙于处理请求”等。
【问题讨论】:
-
你好,你在哪里找到上面的线程状态描述?
-
线程状态及其描述见HotSpot JVM's JavaThreadState class。
标签: java performance multithreading stack-trace jstack