Наиболее распространенной причиной является то, что поток, не являющийся демоном, все еще работает ( Часто задаваемые вопросы по Tomcat ). Нажмите здесь для получения дополнительной информации о потоках демона.
Чтобы узнать, какой поток вызывает проблемы (в Unix):
- сделать
kill -3 tomcatProcId
(найти tomcatProcId используя ps)
- посмотрите в $ TOMCAT_HOME / logs / catalina.out дамп потока, сгенерированный kill
- просмотр всех потоков, не являющихся демонами (не помеченных как "daemon"), не связанных с VM / GC
- для каждого выясните, какой код породил его и почему он не завершился корректно. Некоторые потоки, не являющиеся демонами, часто проверяют завершение, и это нормально.
Если вы хотите, вы можете указать Tomcat убить JVM после завершения работы, даже если остаются потоки, не являющиеся демонами (что иногда может быть плохим ):
- определить переменную среды CATALINA_PID. Например:
export CATALINA_PID=/tmp/catalina_pid
- используйте
catalina.sh stop -force
, чтобы остановить Tomcat.