Tomcat остановился без какого-либо журнала или любого стека

У нас есть проблемы с Tomcat 5.5, который останавливается ночью на наших производственных серверах (Linux CentOS 4.8), и мы понятия не имеем, почему он останавливается... В журнале Catalina.out или в журнале приложений нет журнала Tomcat.

Мы пробовали разные вещи, чтобы узнать, почему сервер останавливается:

  • настроить Tomcat для создания основного дампа
  • инструмент System.exit() с javassist, чтобы узнать, был ли вызван метод
  • добавить к JVM привязку остановки (с Runtime.getRuntime().addShutdownHook())

Ни один из них не работал, у нас нет дампа ядра, метод Exit и hookdown выключения не вызываются. Мои выводы:

  • VM не завершена правильно, но аварийно завершается без какого-либо журнала.

Любая идея или журнал, чтобы прочитать, почему Tomcat останавливается?

Ответы

Ответ 1

1) Убедитесь, что вы знаете, где перенаправляется stderr, и проверьте, не распечатано ли там что-либо.

2) Проверьте ограничения памяти на Tomcat и количество свободной памяти в системе. Просмотрите системные журналы Linux в разделе /​​var/log, чтобы узнать, произошло ли что-то подозрительное за время. Например, ядро ​​может случайно убить процесс (почти) без трассировки, если система работает с низким объемом памяти.

Мы запускали 5.5 в производстве в течение многих лет и никогда не имели никаких необъяснимых отключений, FWIW.

Ответ 2

Скорее всего, существует исключение. Это типичное поведение Tomcat, когда это происходит. Например, вы пытаетесь выполнить сериализацию в JSON или XML beans с циклическими зависимостями (но без обработки циклов).

Каждый раз, когда у меня была эта проблема (несколько раз), она всегда была такой. Все остальные остановки обычно регистрируются должным образом (например, OutOfMemory и т.д.).

Этот тип остановок нигде не оставляет следов.

Ответ 3

У Tomcat 7 есть опция внутри каталины, чтобы предотвратить вызов класса System.exit или что-то подобное: http://ci.apache.org/projects/tomcat/tomcat7/docs/security-manager-howto.html.

Возможно, есть аналогичная опция для версии 5.5. Попробуйте документацию.

Есть варианты перенаправления вывода на ту же консоль, что и для запуска Tomcat. Эта информация перенаправляется на журналы при выполнении в системах на базе Unix, в Windows, она остается с консолью, если не перенаправлена.