我的tomcat服务器正在运行。它由于某种原因突然崩溃...但是我试图找到错误。Tomcat或Java中是否存在像beforeCrash()或beforeExit()这样的函数
是否有在Tomcat中或Java的功能像beforeExit()
或ifCrashed()
我可以重写,写一些代码有一样,如果服务器崩溃,通知自己的某些原因。
我的tomcat服务器正在运行。它由于某种原因突然崩溃...但是我试图找到错误。Tomcat或Java中是否存在像beforeCrash()或beforeExit()这样的函数
是否有在Tomcat中或Java的功能像beforeExit()
或ifCrashed()
我可以重写,写一些代码有一样,如果服务器崩溃,通知自己的某些原因。
您可以尝试使用在系统出口上执行的关闭挂钩。它不能保证,虽然它会在硬盘崩溃像SIGKILL来执行,但是这可能是在某些情况下一个选项:如果分析是你的JProfiler具有离线分析模式,您可以捕捉信息的选项
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// Implementation goes here..;
}
});
这是最好的选择那里... – sanjeev
我不认为坠毁的服务器可以管理的东西。您可以考虑以下步骤:
servletContextListeners
为了在servlet上下文关闭之前运行代码。如果关机正常完成,它将工作OutOfMemoryError
的报告,并打开JMX端口进行监控。HTTPStatus.OK
那么它将工作,如果不 - 那么你可以自己报告自己。如果您可以提供日志和一些关于服务器真正发生的信息,可能会更好。也许这里的人会帮助,但我认为这是另一个问题的话题。
我已经使用第三种方式......但我讨厌投票有点东西 – sanjeev
如果发生致命的崩溃,您将得到一个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
关于正在运行的程序并将其记录下来供以后查看。查看文档 JPRofiler Offline Profiling
这可能会让您更深入地了解应用程序中发生了什么。根据此文档,您还可以从您的应用程序管理性能分析代理。
您标记了tomcat7和tomcat8。你真的在使用哪一个?对于java也一样。 – Nathan
实际上目前在tomcat7,但很快我会升级到tomcat8,如果它存在于该版本。 – sanjeev
在java中有[Thread.setUncaughtExceptionHandler](http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler))其中你可以注册一个被调用的方法,如果有一个未被请求的异常。我不知道这是否也适用于tomcat – k3b