Grails: Tomcat не отключится - PullRequest
       19

Grails: Tomcat не отключится

4 голосов
/ 05 апреля 2011

У меня проблема с закрытием приложения Grails на производстве.

Отключается чисто при запуске из IntelliJ. Но в автономном Tomcat 7 его отключение приводит к переходу в состояние зомби, в котором все еще существует процесс Java, но HTTP-запросы зависают. Я должен убить процесс Java (используя kill).

Я использую стандартные Tomcat bin / startup.sh и shutdown.sh. Когда Tomcat остановлен, я помещаю .war в каталог Tomcat's / webapps и затем запускаю.

Я подозреваю, что это может быть плагин планировщика заданий Quartz, но я развернул версию без заданий в grails-app / jobs, и она все еще зависает.

Кто-нибудь сталкивался с этим раньше? Спасибо!

Ответы [ 2 ]

9 голосов
/ 05 апреля 2011

Темы, не являющиеся демонами

Возможно, один или несколько потоков, не являющихся демонами, все еще работают и не позволяют tomcat успешно завершить работу.

  • откройте Терминал и введите ps -ef| grep java и найдите ваш Tomcat7 p_id
  • тип kill -3 p_id
  • type (в вашем каталоге Tomcat) tail -200 logs/catalina.out
  • проверять дамп потока , сгенерированный kill -3
  • искать темы, не являющиеся демонами
  • проверьте ваш код, чтобы определить, почему этот процесс еще жив.
3 голосов
/ 05 апреля 2011

Я согласен с Керемом Байдоганом. Вероятно, существует поток, не являющийся демоном, который не хочет останавливаться. Дамп потока - отличный способ отследить это.

Я бы порекомендовал подключиться к удаленной JVM с помощью VisualVM. Это был неоценимый инструмент для сбора информации о моих запущенных приложениях. Если вы используете Mac, он уже установлен как часть операционной системы. Из терминала просто введите «jvisualvm». Если не на Mac, это бесплатно скачать с http://visualvm.java.net/

После установки может потребоваться добавить несколько аргументов JVM, чтобы разрешить удаленное соединение. http://visualvm.java.net/jmx_connections.html

Скриншот: Visual VM Thread Dump

...