Я прочитал, что могу найти идентификатор процесса, а затем использовать команду kill, чтобы сохранить дамп потока в файл. Но следующий пример ничего не возвращает ...
# ps aux | grep -i java
wcuser 9136 0.0 17.2 3416012 1412772 ? Sl Oct10 2:32 /usr/bin/java -Djava.util.logging.config.file=/home/../conf/logging.properties ..... ...... start
# kill -3 9136
Что такое дамп потоков?
Насколько точно это работает?
Можно ли автоматизировать процесс периодического снятия дампа в файл?
Он отправляет его туда, где указан стандартный вывод для этого процесса. Более простой способ - использовать jstack, который предоставляется JDK. С помощью этого инструмента вы можете просто:
jstack <pid> > thread-dump.out
Убедитесь, что вы делаете это как пользователь, от имени которого выполняется процесс.
Что такое дамп потока, представляет собой моментальный снимок того, где все текущие потоки в этом процессе Java заняты в стеке. Существуют инструменты, которые упрощают анализ необработанных дампов потоков, например VisualVM или TDA.
Конечно, можно делать это периодически, просто поместив подобное утверждение в cronjob.