Tomcat サーバーから取得したスレッド ダンプを分析しようとしています。スレッド ダンプの 1 つは、数分間のアップタイムの後に取得され、約 70 のスレッド プールが示され、いくつかは WAITING 状態になっています。スクリプトをサーバーに一晩ヒットさせたままにし、朝に別のスレッド ダンプを取得したとき。2 つのダンプを比較すると、スレッドプールが 70 スレッドから 90 スレッドに増加したことがわかります。また、20 個の新しいスレッドが追加されている間、同じスレッドが 1 つのダンプと別のダンプの間で WAITING 状態になっていることもわかります。これは私のアプリケーションに何らかのバグがあることを示唆していますか、それともこれは標準的な動作ですか? 待機中のスレッドが再利用されず、代わりに新しいスレッドが作成される理由が不思議です。
たとえば、最初のスレッド ダンプから、次のように表示されます。
"http-8000-40" - Thread t@74
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
- waiting on <4fd24389> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
at java.lang.Object.wait(Object.java:485)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None
そして、翌朝のダンプで同じスレッドが同じ状態で同じオブジェクトを待っているのを見ることができます: (これは "<>" の数字から推測しています)
"http-8000-40" - Thread t@74
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Native Method)
- waiting on <4fd24389> (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
at java.lang.Object.wait(Object.java:485)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None