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

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

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

До этого краха:

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

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

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

  • Все журналы серверных приложений просто останавливаются без сообщений ERROR (хотя у нас есть журнал, универсально настроенный на DEBUG и выше)
  • Tomcat catalina.out и уважение localhost_access_* файлы просто останавливаются без какой-либо информации

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Также возможно, что jvisualvm фактически вызывает крушение.

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

Ответ 3

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