Это сообщение не имеет большого значения, если вы всегда остановить Tomcat, когда вы отменить развертывание/передислокацию приложение в противном случае эти операции вызывают утечки памяти, является большое дело, EXPECIALLY в производстве.
Темы с именем «Timer- #» создаются java.util.Timer (и, возможно, другими классами), как это было предложено Bob Kuhar, но grepping вашей собственной базы кода может быть недостаточным и гарантировать, что вы используете потоки демона, не устраняет это сообщение (комментарий Тома Хотина верен).
Когда я получил это сообщение он был произведен транзитивной зависимости от моего кода, именно по классу GenericObjectPool
из Apache Commons Pool v1.3, который использует демон нить (см source code). Чтобы найти класс, который создает экземпляр таймера, мне пришлось поставить брек-точку в каждый конструктор класса Timer, а затем я рассмотрел стек вызовов. Чтобы решить проблему, мне пришлось обновить библиотеку (более новые версии Commons Pool не используют этот таймер).
Когда вы контролируете код, создающий поток, вы можете решить проблему, гарантируя, что вы остановите поток, когда приложение остановится. Использование потоков демона - хорошая практика, но этого недостаточно, потому что потоки демона автоматически умирают только при выключении Tomcat, но не при развертывании приложения.
В более общем случае, когда вы не знаете, кто создал неприятную нить, проверьте Finding Source of Thread Creation in a Java application и Detect Who Created a Thread (w. Eclipse).
UPDATE
Совершенно иной подход заключается в использовании очень интересный Leak Prevention Listener. Также прочитайте другие сообщения об утечках загрузчика классов этого автора.
На самом деле то, что я делаю, это мониторинг файла журнала, который постоянно обновляется, и я делаю это с помощью таймера, который запускается после каждой секунды. Возможно, вы предложите какую-нибудь лучшую технику, оцените, – Rookie
предупреждающее сообщение похоже, когда сервер все еще работает. Потенциально, если просто перезапустить webapp. Свойство daemon не собирается исправлять это. Он должен полностью выйти из контекстного события сервлета для выключения. –