2013-07-29 6 views
0

Я хочу создать дамп потока моего запущенного приложения. Однако, когда я убиваю -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?

+0

Источником для этого является полностью в JVM в C++. Вам нужно создать сборку OpenJDK, которую вы можете изменить для дампа в файл. BTW Вы можете написать свой собственный дамп потока с помощью JMX и Thread.getAllStackTraces() и т. Д., Но это не будет вызвано 'kill -3' –

+0

Затем, как tomcat записывает дамп нитей в файл по умолчанию. –

+0

Я имею в виду, как tomcat записывает дамп потока в файл catalina.out. –

ответ

0

Вам необходимо использовать опцию jmap -dump для сброса дампа кучи работающего приложения. Вот интересный блог на веб-сайте oracle, в котором описывается, как программно выгружать кучу из приложений Java.

https://blogs.oracle.com/sundararajan/entry/programmatically_dumping_heap_from_java

+0

Мне не нужна куча кучи, пожалуйста, прочитайте вопросительный вопрос. –