Tomcat внезапно умирает - PullRequest
       20

Tomcat внезапно умирает

17 голосов
/ 03 февраля 2012

Попытка диагностировать некоторые странные ошибки Tomcat (7.0.21) и / или JVM на 64-битной машине Linux (CentOS).

Я тестирую нагрузку на наше серверное приложение и пытаюсь использовать его с 100KСообщения.Запустил jvisualvm и все время следил за кучей.Все выглядело замечательно * (см. Ниже), пока я не получил около 93K обработанных сообщений, а затем Tomcat просто умер.Выполните ps на номере PID Tomcat, чтобы подтвердить, что он мёртв.

Вплоть до этого сбоя:

  • Тест нагрузки продолжался около 90 минут;должен был закончиться вскоре после этого, так как мы были на 93K / 100K)
  • Процессор держался крепко около 45%
  • Использованная куча была около 2 ГБ (плюс или минус куча после GC), но размер кучи выросот 4 ГБ до MAX_HEAP примерно через 30 минут
  • Загрузка / выгрузка классов велась нормально
  • Дампы потоков были нормальными

Нигде в коде сервера нет вызововна System.exit() - так что мы можем исключить это прямо (и да, я дважды проверил !!!).

Я не уверен, что это сбой Tomcat или JVM ( какмне сказать? ).И даже если бы я знал, я не могу найти никаких указаний на то, что пошло не так:

  • Все журналы серверного приложения просто останавливаются без каких-либо сообщений об ОШИБКАХ (даже при том, что мы ведем журналирование универсально установленнымдо DEBUG и выше)
  • Tomcat catalina.out и уважаемые localhost_access_* файлы просто останавливаются без какой-либо информации

Я слышал, что Tomcat может регистрировать coredump, когда онно не уверен, как это сделать, и онлайн-примеры не очень помогают.

Как бы SO поступил так, чтобы диагностировать это?Какие шаги я должен предпринять, чтобы начать исключать все возможные факторы?

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

Ответы [ 4 ]

14 голосов
/ 03 февраля 2012

Если JVM дает сбой, у вас должен быть файл hs_err_pidNNN.log; Вам не нужно ничего делать, чтобы включить это. Его расположение зависит от вашей ОС и от того, как вы используете Tomcat. В Windows они могут отображаться на вашем рабочем столе, если вы не работаете в качестве службы. В противном случае они должны находиться в текущем рабочем каталоге сбойного процесса.

Ваша операционная система, вероятно, предоставляет дополнительные инструменты для мониторинга процесса; Вы могли бы описать свою среду более подробно, или, возможно, спросить на serverfault.com .

Также возможно, что jvisualvm действительно вызывает сбой.

Я бы попытался воспроизвести проблему и постепенно упростить сценарий, чтобы помочь выявить причину.

6 голосов
/ 03 февраля 2012

Другая возможность заключается в том, что ОС не хватает памяти, а OOM Killer убивает ваш процесс.В этом случае JVM не получит возможность записать дамп кучи или файл hs_err_pid.

4 голосов
/ 03 февраля 2012

Вы можете использовать параметр java -XX: + HeapDumpOnOutOfMemoryError, чтобы создать дамп кучи для сбоя jvm из-за ошибки нехватки памяти.

Подробнее здесь Использование параметра HeapDumpOnOutOfMemoryError для дампа кучи для JBoss .

0 голосов
/ 08 февраля 2012

Извините, мне пришлось убрать зеленый чек из @erickson.Я наконец выяснил, что убивает Tomcat.

Похоже, что плагин профилировщика неправильно настроен с VisualVM, и попытка запустить профиль в процессе Tomcat убила его.

Расследование, почему сейчаси обновлю этот ответ, как только узнаю больше.

...