Томкат внезапно умирает
Попытка диагностировать некоторые странные 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.
Ответ 4
Вы можете использовать опцию java -XX: + HeapDumpOnOutOfMemoryError для создания дампа кучи для сбоя jvm из-за ошибки в памяти.
Подробнее здесь. Использование параметра HeapDumpOnOutOfMemoryError для дампа кучи для JBoss.