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