Расположение дампа JVM
Когда я выдаю команду kill -3 <pid>
моей программе Java, она генерирует дамп потока на консоли. Как перенаправить это в файл?
Ответы
Ответ 1
Два варианта:
Запустите приложение Java с перенаправленным stdout
java com.example.MyApp > out.txt
Вместо этого используйте jstack
.
Утилита jstack позволяет вам получить дамп потока и отправить вывод в текущую консоль вместо стандартного вывода приложения Java, позволяя вам перенаправить его.
Например, если PID вашего Java-приложения составляет 12345 (воспользуйтесь утилитой jps, чтобы быстро найти ее):
jstack 12345 > threads.txt
Ответ 2
Я обычно использую NetBeans профилировщик, но jvisualvm доступен из командной строки.
Ответ 3
Если вам нужны детали всех потоков и другие детали JVM, попробуйте jconsole.
Ответ 4
Добавьте в приложение следующие аргументы JVM. Сброс дат должен быть зафиксирован на dump.log.
-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=dump.log
Обратите внимание, что он не перенаправляется, но позволяет вести журнал диагностики JVM. Таким образом, может быть возможно и над головой.
Однако, если вы можете иметь JDK в среде, используя jstack или jcmd (jcmd предпочтительнее с JDK 1.8), вы можете захватывать поток дамп и перенаправление на файл.