Потоки зомби, поедающие мой мозг (J2EE, Tomcat, Hibernate, Quartz)
-
22-07-2019 - |
Вопрос
IT является Хэллоуин, в конце концов.
Вот в чем проблема:Я поддерживаю какой-то старый код J2EE, используя Quartz, в котором у меня заканчиваются потоки. jconsole
говорит мне, что при переходе в грушевидную форму не хватает 60 тысяч потоков, из которых на самом деле запущено около 100 (!!).Интуиция и немного погуглить (см. Также здесь) предполагают, что происходит нечто (держу пари, Quartz), создающее неуправляемые потоки, которые никогда не очищаются.
Несколько дополнительных вопросов:
Есть ли инструмент, который я могу легко использовать для отслеживания создания потока, чтобы я мог быть уверен, что проблема действительно в Quartz?
Почти все, что я нашел о подобных проблемах, ссылается на Weblogic;это ложная зацепка для Tomcat?
У кого-нибудь есть известное решение?
Прошло много лет с тех пор, как я делал J2EE, так что я не был бы слишком удивлен, если бы это было что-то, что можно решить просто.
Обновить:Это явно увеличивает количество потоков без привязки, смотрите Этот график из jconsole.
Решение
Попробуйте увеличить уровень ведения журнала
org.quartz.simpl.SimpleThreadPool
для отладки, чтобы получить больше информации.Если это не сработает, попробуйте использовать прослушиватель ведения журнала.Quartz имеет интерфейс JobListener, который указан в его Учебник.Прослушиватель может помочь вам отслеживать выполнение задания.Может быть, задания просто не заканчиваются и заходят в тупик.
Настройка
org.quartz.threadPool.threadCount
чтобы остановить нехватку потоков.
Обновить:
Кроме того, вы можете захотеть сделать дамп потока и посмотреть статистику потока. визуальная виртуальная машина имеет плагин под названием TDA, или вы можете использовать Анализатор сброса потока напрямую.
На всякий случай проверьте версию quartz, чтобы убедиться в отсутствии известных ошибок.
Другие советы
Посмотрели ли вы jvisualvm - он дает больше информации.
Кроме того, получите трассировку стека, чтобы увидеть, что на самом деле ожидают потоки. У вас может быть чувство ага прямо там. Р>