2013-12-18 2 views
0

Я настроил сервер автоматического перезапуска Tomcat, но я часто получаю ошибку ниже:Tomcat вопрос перезапуска

Dec 10, 2013 5:30:32 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 
**SEVERE**: The web application [/Xyz/Abc] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak. 

И это исключение не давая рестарт и, следовательно, мое приложение становится остановлено.

Заранее спасибо.

+0

Необходимо знать о ваших конфигурациях как можно скорее. – Josh

+0

@Soylent - Какие конфигурации вам нужно знать? – Sharmi

+0

Вы предоставили очень мало информации в вопросе. Я думаю, у нас есть больше шансов помочь вам, если вы предоставите больше информации. Вы пишете «Я настроил сервер Tomcat» Есть ли какие-либо сведения о конфигурации, которую вы можете поделиться с нами? – Josh

ответ

1

Я не думаю, что это исключение, которое останавливает tomcat от перезапуска. Ваш скрипт shutdown не останавливает tomcat, он просто открывает порт на сервере tomcat (8005, если вы не изменили значение по умолчанию в server.xml), сообщает ему, чтобы он остановился, а затем вышел. Tomcat может все еще нуждаться в секундах или двух, чтобы очистить, прежде чем он выйдет. Поэтому, если вы делаете что-то вроде shutdown.sh; startup.sh в своем сценарии перезапуска, стартовый tomcat может захотеть привязать к порту, который еще не выпустил предыдущий tomcat. Помещение sleep 5 между выключением и запуском должно решить это.

Это код, который я недавно написал, когда я была такая же проблема:

instdir=/usr/lib 
port=8443 
$instdir/tomcat/bin/shutdown.sh 

tries=0 
while netstat -anf inet | grep '\*\.'$port > /dev/null 
do 
    tries=`expr $tries + 1` 
    test $tries -ge 12 && break 
    sleep 5 
done 

if test "$tries" -ge 12 
then 
    echo "Could not stop tomcat, port $port still in use" 
    exit 1 
fi 
$instdir/tomcat/bin/startup.sh 
+0

Я должен попробовать это. Но я получаю только строки ошибок в журналах, если перезапуск не выполняется должным образом, а tomcat остается выключенным, пока я не перезапущу его вручную. – Sharmi

+0

Возможно, вы правы - но, возможно, поток Timer-0 не всегда запускается приложением. Поэтому, если он начнется, tomcat ждет его завершения, что вызывает задержку. Если он не запускается (потому что вы не использовали функцию вашего приложения, которая ему нужна), tomcat не должен ждать и выходить быстрее. –

0

Вам необходимо исправить исходную задачу, вместо того, чтобы пытаться работать вокруг симптома. Запустите веб-приложение и выясните, что делает Timer-0. Это должно указывать, где оно инициализируется. Найти это место и обеспечить следующее:

  1. Нить запускается демон = истина
  2. нить останавливается в ServletContextListener или что-то подобное

Реалистично, # 2 выше должно быть сделано в тот же компонент, который запускает нить (ServletContextInitializer, ServletContextListener, Servlet и т. д.).

Смежные вопросы