Javaスレッドは、常に次の10の状態のいずれかになります。
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
)はリストから省略されています。
状態の定義は上に示されていますが、実行中のappserverの特定のスレッド状態設定を解釈するための「経験則」を探しています。そして、より具体的には:
さまざまな時点で、次のスレッド統計( jstackを使用して取得)を持つライブアプリケーションサーバーを想定します。
- 100スレッド:
BLOCKED
35、65IN_NATIVE
- 113スレッド:
BLOCKED
35、77、1IN_NATIVE
IN_VM
- 52スレッド:
BLOCKED
38、1、6、7IN_JAVA
IN_NATIVE
IN_VM
- 120スレッド:
BLOCKED
39、1、80IN_JAVA
IN_NATIVE
- 94スレッド:
BLOCKED
34、59、1IN_NATIVE
IN_NATIVE_TRANS
5つの統計のスレッドごとに、JVMの全体的な状態に関して何を推測できますか?つまり、「このシナリオでは、JVMは要求を待機しているように見えます」、「マシンは要求の処理でビジーです」などです。