Расположение дампа 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), вы можете захватывать поток дамп и перенаправление на файл.