Tomcat或Java中是否存在类似beforeCrash()或beforeExit()的函数

时间:2017-08-02 09:11:51

标签: java tomcat java-8 tomcat7 tomcat8

我运行tomcat服务器。并且由于某种原因突然崩溃......但是我试图找到错误。

tomcat或java中是否有一个函数,如beforeExit()ifCrashed()我可以覆盖并编写一些代码,如果服务器由于某种原因崩溃,则通知自己。

4 个答案:

答案 0 :(得分:7)

您可以尝试使用在系统出口处执行的关闭挂钩。它不能保证它会在像SIGKILL这样的硬崩溃时执行,但在某些情况下这可能是一个选项:

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

答案 1 :(得分:2)

我不认为崩溃的服务器可以管理某些东西。您可以考虑以下步骤:

  • 使用servletContextListeners以便在servlet上下文关闭之前运行代码。如果正常关闭,它将起作用
  • 如果是破解的JVM,您可以尝试查找提供JVM监视服务和报告的工具。另外,我建议提供标记以便从OutOfMemoryError获取报告并打开JMX端口进行监控
  • 你可以对一些模拟休息端点进行操作并运行一些定期调用该端点的外部作业,如果它返回HTTPStatus.OK那么它会工作,如果没有 - 那么你可以自己报告。

如果您可以提供日志以及有关服务器实际发生情况的一些信息,那可能会更好。也许在这里人们会帮助,但我猜这是另一个问题的主题。

答案 2 :(得分:0)

如果发生致命的崩溃,您将获得一个jvm日志。您可以通过在Oracle JVM上提供tomcat a -XX:ErrorFile来指定位置

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

如果它不是致命的,您可以调整tomcat中的日志设置以显示更好的日志记录级别,例如在其doc站点上指定的

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

如果由于内存不足错误而死亡,您可以在OOM上获取堆转储,并使用ie jhat进行分析

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

答案 3 :(得分:0)

如果您可以选择性能分析,则JProfiler具有脱机性能分析模式,您可以在其中捕获有关正在运行的程序的信息并将其记录以供以后查看。查看文档 JPRofiler Offline Profiling

这可能会让您更深入地了解应用程序中发生的事情。根据此文档,您还可以从您的应用程序管理概要分析代理。