Когда приложение Java висит, вы даже не знаете, какой прецедент приводит к этому, и вы хотите его изучить, я понимаю, что дампы потоков могут быть полезны.
Но как мы можем легко извлечь полезные данные из дампов потоков, чтобы найти, где проблема? Серверное приложение, с которым я работаю, создает очень длинные дампы потоков, потому что это архитектура EJB и дампы потоков содержат много потоков контейнеров, которые я не уверен, что я должен смотреть (т.е. потоки, которые не запускают мой код приложения, но код JBoss).
Вчера я попробовал инструмент инструмент Dump Analyzer. Инструмент определенно лучше, чем просмотр исходных дампов потока в текстовом редакторе, потому что вы можете отфильтровывать потоки, которые вам не интересны, просматривать список потоков, нажимать на поток, чтобы увидеть его данные, сравнить потоки дампов, чтобы найти длинные потоки и т.д. Смотрите снимок экрана ниже:
Но есть еще слишком много данных для анализа - почти 300 потоков. Я не знаю никаких критериев, которые я мог бы использовать для фильтрации всех потоков JBoss, в которых мне неинтересно. Я не уверен, что я должен смотреть на потоки, которые в настоящее время находятся в состоянии "runnable" или если "ожидание при условии" и "в Object.wait" также важны.
Каким будет подход, которым вы обычно будете следовать, и инструменты, которые вы обычно используете?