Я анализирую различия между подходами к созданию дампов потоков. Ниже приведены некоторые из них, которые я изучаю.
Определение bean-компонента jmx, который запускает jstack через Runtime.exec() при нажатии объявленной операции bean-компонента.
Поток демона, многократно выполняющий "ManagementFactory.getThreadMXBean().dumpAllThreads(true, true)" после заданного интервала.
Сравнивая выходные данные дампа потока между ними, я вижу следующие недостатки подхода 2.
- Дампы потоков, зарегистрированные с помощью подхода 2, не могут быть проанализированы анализаторами дампов потоков с открытым исходным кодом, такими как TDA.
- Вывод не включает собственный идентификатор потока, который может быть полезен при анализе проблем с высокой загрузкой процессора (правильно?)
- Больше?
Я был бы признателен за предложения / материалы по
Есть ли недостатки при выполнении jstack через Runtime.exec() в производственном коде? какие-то проблемы с совместимостью на разных операционных системах - windows, linux?
Любой другой подход к созданию дампов потоков?
Спасибо.
Изменить –
Комбинированный подход 1 и 2 кажется правильным. У нас может быть выделенный поток, работающий в фоновом режиме и печатающий дампы потоков в файле журнала в формате, понятном анализаторам дампов потоков. Если требуется какая-либо дополнительная информация (например, скажем, собственный идентификатор потока), которая регистрируется только выводом jstack, мы делаем это вручную по мере необходимости.