実行中のアプリケーションのスレッド ダンプを生成したいと考えています。ただし、-3 PID を強制終了すると、実行中のアプリケーションのコンソールにスレッド ダンプが生成されます。
ファイルに生成したい。アプリケーションを ./run.sh > thread_dump として実行できることはわかっています。または、jstack ユーティリティを使用してアプリケーションをファイルにリダイレクトすることもできます。
しかし、私はそれらのいずれも使用したくありません。別のアプローチでは、次の方法でコンソールの完全な出力をファイルにリダイレクトしました。
File file = new File("out.txt");
FileOutputStream fos = new FileOutputStream(file);
PrintStream ps = new PrintStream(fos);
System.setOut(ps);
これで、すべての出力が out.txt に書き込まれます。それでも、 kill -3 を実行すると、スレッド ダンプがコンソールに書き込まれます。
3番目のアプローチで何が欠けていますか? kill -3 が JVM で呼び出されたときにどのクラス/ソースが呼び出されるか、誰にもわかりますか?