Я хочу создать дамп потока моего запущенного приложения. Однако, когда я убиваю -3 PID, он генерирует дамп потока на консоли запущенного приложения.Какой класс используется для печати дампа потоков виртуальной машины Java JVM?
Я хочу сгенерировать его в файл. Я знаю, что могу запустить приложение как ./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. Но все же, когда я убиваю -3, он записывает дамп потока для консоли.
Что мне не хватает в третьем подходе? Кто-нибудь знает, какой класс/источник вызывается, когда kill-3 вызывается на JVM, так что я могу посмотреть, как поточный дамп точно написан при создании команды-запроса kill-3?
Источником для этого является полностью в JVM в C++. Вам нужно создать сборку OpenJDK, которую вы можете изменить для дампа в файл. BTW Вы можете написать свой собственный дамп потока с помощью JMX и Thread.getAllStackTraces() и т. Д., Но это не будет вызвано 'kill -3' –
Затем, как tomcat записывает дамп нитей в файл по умолчанию. –
Я имею в виду, как tomcat записывает дамп потока в файл catalina.out. –