Подтвердить что ты не робот

Имеются ли какие-либо функции, такие как beforeCrash() или beforeExit(), существуют в Tomcat или Java

У меня работает сервер tomcat. и по какой-то причине он неожиданно падает... однако я пытаюсь найти ошибку.

Есть ли функция в tomcat или java как beforeExit() или ifCrashed(), которую я могу переопределить и написать там какой-то код, например, уведомлять себя, если по какой-то причине сбой сервера.

4b9b3361

Ответ 1

Вы можете попробовать использовать закрытые крючки, которые выполняются при выходе из системы. Это не гарантирует, что он будет выполнен на жестком сбое, например SIGKILL, но в некоторых случаях это может быть вариант:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        // Implementation goes here..;
    }
});

Ответ 2

Я не думаю, что разбитый сервер может что-то управлять. Вы можете рассмотреть следующие шаги:

  • используйте servletContextListeners для запуска кода до того, как контекст сервлета отключится. Он будет работать, если выключение выполняется изящно
  • Если JVM сокрушительно, вы можете попытаться найти инструменты, которые предоставляют услуги мониторинга JVM и отчетность. Также я рекомендую предоставить флаг для получения отчетов от OutOfMemoryError и открыть порты JMX для мониторинга
  • вы можете исправить некоторую часть конечной точки отдыха и запустить какое-то внешнее задание, которое будет периодически вызывать эту конечную точку, и если оно вернет HTTPStatus.OK, тогда оно будет работать, если нет - тогда вы можете сообщить о себе как-то.

Было бы лучше, если бы вы могли предоставить журналы и некоторую информацию о том, что на самом деле происходит с сервером. Может быть, здесь люди помогут, но я считаю, что это тема других вопросов.

Ответ 3

В случае фатального сбоя вы получите журнал jvm. Вы можете указать местоположение, указав tomcat a -XX: ErrorFile в Oracle JVM

http://www.oracle.com/technetwork/java/javase/felog-138657.html

Если это не так роковое, вы можете настроить параметры журнала в tomcat, чтобы отображать более высокие уровни ведения журнала, например, указанные на их сайте doc

https://tomcat.apache.org/tomcat-6.0-doc/logging.html

Если он умирает из-за ошибок в памяти, вы можете получить кучу дампа в OOM и проанализировать его с помощью jhat

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html

Ответ 4

Если профилирование является вариантом для вас, JProfiler имеет режим автономного профилирования, в котором вы можете записывать информацию о запущенной программе и регистрировать ее для просмотра в более позднее время. Проверьте документы JPRofiler Offline Profiling

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