スレッド ダンプを取得するためのアプローチの違いを分析しています。以下は、私が研究しているそれらのカップルです
宣言された Bean 操作をクリックすると、Runtime.exec() を介して jstack をトリガーする jmx Bean を定義します。
「ManagementFactory.getThreadMXBean().dumpAllThreads(true, true)」を定義済みの間隔で繰り返し実行するデーモン スレッド。
2 つのスレッド ダンプ出力を比較すると、アプローチ 2 には以下の欠点があります。
- アプローチ 2 でログに記録されたスレッド ダンプは、TDA などのオープン ソースのスレッド ダンプ アナライザーでは解析できません。
- 出力には、CPU 使用率が高い問題の分析に役立つ可能性があるネイティブ スレッド ID が含まれていません (そうですか?)
- もう?
提案/入力をいただければ幸いです
プロダクションコードで Runtime.exec() を介して jstack を実行することの欠点はありますか? さまざまなオペレーティング システム (Windows、Linux) での互換性の問題はありますか?
スレッド ダンプを取得する他の方法はありますか?
ありがとうございました。
編集 -
1 と 2 を組み合わせたアプローチが有効なようです。専用のスレッドをバックグラウンドで実行し、スレッド ダンプ アナライザーが理解できる形式でログ ファイルにスレッド ダンプを出力することができます。jstack 出力によってのみログに記録される追加情報 (おそらくネイティブ スレッド ID など) が必要な場合は、必要に応じて手動で行います。