2017-08-02 24 views
10

我的tomcat服务器正在运行。它由于某种原因突然崩溃...但是我试图找到错误。Tomcat或Java中是否存在像beforeCrash()或beforeExit()这样的函数

是否有在Tomcat中或Java的功能像beforeExit()ifCrashed()我可以重写,写一些代码有一样,如果服务器崩溃,通知自己的某些原因。

+0

您标记了tomcat7和tomcat8。你真的在使用哪一个?对于java也一样。 – Nathan

+0

实际上目前在tomcat7,但很快我会升级到tomcat8,如果它存在于该版本。 – sanjeev

+0

在java中有[Thread.setUncaughtExceptionHandler](http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler))其中你可以注册一个被调用的方法,如果有一个未被请求的异常。我不知道这是否也适用于tomcat – k3b

回答

7

您可以尝试使用在系统出口上执行的关闭挂钩。它不能保证,虽然它会在硬盘崩溃像SIGKILL来执行,但是这可能是在某些情况下一个选项:如果分析是你的JProfiler具有离线分析模式,您可以捕捉信息的选项

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

这是最好的选择那里... – sanjeev

2

我不认为坠毁的服务器可以管理的东西。您可以考虑以下步骤:

  • 使用servletContextListeners为了在servlet上下文关闭之前运行代码。如果关机正常完成,它将工作
  • 如果是压缩JVM,您可以尝试找到提供JVM监视服务和报告的工具。此外,我建议提供标志,以获得来自OutOfMemoryError的报告,并打开JMX端口进行监控。
  • 您可以对某些模拟休息端点执行一些外部作业,该作业将定期调用该端点,如果它返回HTTPStatus.OK那么它将工作,如果不 - 那么你可以自己报告自己。

如果您可以提供日志和一些关于服务器真正发生的信息,可能会更好。也许这里的人会帮助,但我认为这是另一个问题的话题。

+0

我已经使用第三种方式......但我讨厌投票有点东西 – sanjeev

0

如果发生致命的崩溃,您将得到一个jvm日志。您可以通过给tomcat的一个-XX指定位置:错误文件上的Oracle JVM

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

如果它不是致命的,你可以在Tomcat中显示更好的日志记录级别,如指定调整日志设置在他们的文档网站

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

如果死了,因为内存不足错误的,你可以得到OOM堆转储,并用即分析与jHat它

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

0

关于正在运行的程序并将其记录下来供以后查看。查看文档 JPRofiler Offline Profiling

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

相关问题