Tomcat 或 Java 中是否存在像 beforeCrash() 或 beforeExit() 这样的函数
Does any function like beforeCrash() or beforeExit() exist in Tomcat or Java
我有 tomcat 服务器 运行。由于某种原因它突然崩溃了...但是我正在尝试查找错误。
tomcat 或 java 中是否有类似 beforeExit()
或 ifCrashed()
的功能,我可以覆盖并在那里编写一些代码,例如在服务器因某些原因崩溃时通知自己原因。
我认为崩溃的服务器无法解决问题。您可以考虑以下步骤:
- 使用
servletContextListeners
以便 运行 在 servlet 上下文关闭之前编写代码。如果关机正常完成,它将起作用
- 如果是 JVM 压垮你可以尝试寻找提供 JVM 监控服务和报告的工具。我还建议提供标志以便从
OutOfMemoryError
获取报告并打开 JMX 端口进行监控
- 你可以纠正一些模拟休息端点和 运行 一些会定期调用该端点的外部作业,如果它 returns
HTTPStatus.OK
那么它就可以工作,如果没有 - 那么你可以以某种方式报告自己。
如果您能提供日志和一些关于服务器实际情况的信息,那可能会更好。也许这里的人会提供帮助,但我想这是另一个问题的主题。
如果发生致命崩溃,您将获得 jvm 日志。您可以通过在 Oracle JVM
上给 tomcat 一个 -XX:ErrorFile 来指定位置
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
您可以尝试使用在系统退出时执行的关闭挂钩。虽然不能保证它会在像 SIGKILL 这样的硬崩溃时执行,但在某些情况下这可能是一个选项:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// Implementation goes here..;
}
});
如果分析是您的一个选项,JProfiler 有一个离线分析模式,您可以在其中捕获有关 运行 程序的信息并将其记录下来以供以后查看。查看文档
JPRofiler Offline Profiling
这可能会让您更深入地了解应用程序中发生的事情。根据此文档,您还可以从您的应用程序管理分析代理。
我有 tomcat 服务器 运行。由于某种原因它突然崩溃了...但是我正在尝试查找错误。
tomcat 或 java 中是否有类似 beforeExit()
或 ifCrashed()
的功能,我可以覆盖并在那里编写一些代码,例如在服务器因某些原因崩溃时通知自己原因。
我认为崩溃的服务器无法解决问题。您可以考虑以下步骤:
- 使用
servletContextListeners
以便 运行 在 servlet 上下文关闭之前编写代码。如果关机正常完成,它将起作用 - 如果是 JVM 压垮你可以尝试寻找提供 JVM 监控服务和报告的工具。我还建议提供标志以便从
OutOfMemoryError
获取报告并打开 JMX 端口进行监控 - 你可以纠正一些模拟休息端点和 运行 一些会定期调用该端点的外部作业,如果它 returns
HTTPStatus.OK
那么它就可以工作,如果没有 - 那么你可以以某种方式报告自己。
如果您能提供日志和一些关于服务器实际情况的信息,那可能会更好。也许这里的人会提供帮助,但我想这是另一个问题的主题。
如果发生致命崩溃,您将获得 jvm 日志。您可以通过在 Oracle JVM
上给 tomcat 一个 -XX:ErrorFile 来指定位置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
您可以尝试使用在系统退出时执行的关闭挂钩。虽然不能保证它会在像 SIGKILL 这样的硬崩溃时执行,但在某些情况下这可能是一个选项:
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
// Implementation goes here..;
}
});
如果分析是您的一个选项,JProfiler 有一个离线分析模式,您可以在其中捕获有关 运行 程序的信息并将其记录下来以供以后查看。查看文档 JPRofiler Offline Profiling
这可能会让您更深入地了解应用程序中发生的事情。根据此文档,您还可以从您的应用程序管理分析代理。