Tomcat случайно отключается с паузой AbstractProtocol после легкого использования - PullRequest
19 голосов
/ 11 ноября 2011

После запуска моего веб-приложения некоторое время (время варьируется между часами и днями в зависимости от трафика) Tomcat, по-видимому, случайным образом отключается.До того, как это произойдет (нет исключений), в журнале нет ничего необычного, просто обычная информация, которую выдает мое приложение.

Кто-нибудь может помочь в том, как лучше отладить это?Есть ли в Tomcat что-нибудь, что могло бы вызвать сигнал AbstractProtocol pause?

Журналы:

09-Nov-2011 21:40:19 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-80"]
09-Nov-2011 21:40:20 org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
09-Nov-2011 21:40:21 org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina

Версия Java: 1.6.0_25-b06 Версия Tomcat: 6

Ответы [ 4 ]

5 голосов
/ 19 января 2012

Я уже видел это раньше, и журналы могут быть иногда загадочными. Тем не менее, я замечаю, что вы работаете на порте 80 (это совсем другая проблема), что заставляет меня поверить, что вы изменили ваш server.xml. Если на сервере имеется несколько экземпляров tomcat, убедитесь, что у них все уникальные порты выключения. Стандартный порт - 8005. Если несколько экземпляров прослушивают один и тот же порт, их можно отключить.

В вашем коде или в заимствованной библиотеке может быть случайный System.exit (), или вы неправильно подавляете истинное сообщение об ошибке в своем коде. Я много раз видел, как люди пишут это на контроллерах как форму обработки ошибок:

try {
  // Do something
} catch(Exception e) {
  // No rethrowing or logging, just suppressing
}

Это предотвращает всплывание или даже правильное ведение журнала истинной ошибки.

Я также видел, как серверы Tomcat просто перестали работать, когда они достигли предела памяти. Где-то в журналах будет ошибка пространства кучи, но по какой-то причине я нахожу, что она может быть похоронена довольно легко, и все, что останется, это сообщения паузы. Возможно, стоит заглянуть в localhost.log, кроме того, из catalina.out. Там обычно меньше мусора.

2 голосов
/ 31 июля 2015

Наш tomcat загадочным образом отключился, потому что наш пользовательский скрипт запустил оригинальный startup.sh (без nohup) и продолжал занимать много времени. Тот, кто вызывал пользовательский скрипт, использовал Ctrl-Z, чтобы поместить его в фоновый режим, а затем закрыл терминал замазки. Это отправило SIGHUP всем процессам, подключенным к терминалу, и tomcat отключился.

Жаль, что кот напечатал сообщение о получении SIGHUP. Позже мы нашли эту ссылку, которая подтвердила наш анализ.

http://solveissue.com/note?id=1767204

2 голосов
/ 11 июля 2015

Если вы работаете над производственной коробкой или хотите быстрое / временное исправление, вы можете установить порт отключения в server.xml на «-1», что приведет к отключению команды отключения.Это не позволит другим приложениям, которые могут иметь такой же порт отключения, отправлять сигнал завершения работы вашему экземпляру tomcat.Но с этим параметром вам придется убить своего кота, а не выключать его.Это плохая часть.

0 голосов
/ 31 августа 2015

У нас есть эта проблема, когда logrotate отправляет «kill -HUP» процессу Apache, и Apache порождает Tomcat: Apache убьет всех своих потомков, когда получит сигнал HUP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...