Можете ли вы приостановить приложение Java и получить снимок его потоков из приложения? - PullRequest
3 голосов
/ 04 июня 2010

Я смотрю на написание кода мониторинга, который выполняется внутри приложения Java и периодически делает снимок запущенных потоков и отображает некоторую информацию о стеке вызовов для каждого.

В идеале это должно быть расширено для профилирования и / или мониторинга.

Я не хочу использовать внешний инструмент, так как он предназначен для самообразования.

Ответы [ 5 ]

4 голосов
/ 04 июня 2010

Вы пробовали Thread.getAllStackTraces ()

3 голосов
/ 04 июня 2010

Взгляните на ThreadMXBean.dumpAllThreads(boolean, boolean)

ThreadMXBean bean = ManagementFactory.getThreadMXBean();
ThreadInfo[] info = bean.dumpAllThreads(true, true);
1 голос
/ 04 июня 2010

Вы можете зарегистрировать потоки, которые вы хотите просматривать во время создания, и иметь отдельный поток метрик для мониторинга. Возможно, вы захотите встроить определенные метрики в поток, например, список недавнего времени выполнения, текущей пропускной способности или другие виды метрик.

1 голос
/ 04 июня 2010

Вы изучили методы класса Thread , такие как Thread.enumerate(), Thread.activeCount(), Thread.getName()?

0 голосов
/ 04 июня 2010

kill -SIGQUIT {java_process}

сбросит все трассировки стека в стандартный вывод процесса Java.

...