500 java.lang.OutOfMemoryError后重定向
我有一个JSF应用程序,我想确保当用户在HTTP 500中出错时,它能为用户提供有意义的响应。当我强制执行OutOfMemoryError时,应用程序将死亡,但我从Tomcat 6.0.35获得了一个默认的500错误页面 我的应用程序设置的相关部分包括: web.xml:500 java.lang.OutOfMemoryError后重定向,java,jsf,out-of-memory,Java,Jsf,Out Of Memory,我有一个JSF应用程序,我想确保当用户在HTTP 500中出错时,它能为用户提供有意义的响应。当我强制执行OutOfMemoryError时,应用程序将死亡,但我从Tomcat 6.0.35获得了一个默认的500错误页面 我的应用程序设置的相关部分包括: web.xml: <filter> <filter-name>Error</filter-name> <filter-class>myApp.ErrorFilter</fil
<filter>
<filter-name>Error</filter-name>
<filter-class>myApp.ErrorFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Error</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
}
减少堆叠痕迹,让您尽情享受:
2012-09-17 17:35:51,881|ERROR|[http-8080-1]:Exception in the filter chain
javax.servlet.ServletException: Servlet execution threw an exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
可能是最相关的一点:
Sep 17, 2012 5:35:51 PM com.sun.faces.lifecycle.Phase doPhase
SEVERE: JSF1054: (Phase ID: RESTORE_VIEW 1, View ID: ) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@16968dd]
Sep 17, 2012 5:35:51 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.application.ViewExpiredException: viewId:/error.jsf - View /error.jsf could not be restored.
现在我的观点是,当容器达到最大内存限制时,它就会死亡,因此,如果堆栈处于保留状态,则error.jsf posh error页是不可访问的
我的问题是:
谢谢基本上,1的答案是否定的,你不应该试图从OOM错误中恢复(更多信息,请查看评论和答案中提供的链接)。错误将发布在tomcat日志和web应用程序日志(如果有)中 如果你得到一个OOM,我会使用一个分析器来检查问题可能在哪里,并尝试解决问题 其他信息:
另外,您可以使用错误代码处理错误,只需在web.xml中添加以下内容:
500
/ErrorForCode500.html
一旦遇到OOM异常,应用程序的整个状态都是可疑的,不应恢复。尝试处理这件事有点高尚,但更重要的是确保它不会发生。谢谢你的回答。关于第二点,我将重新引用某些异常,它们由上面列出的web.xml获取,因此添加500将不起作用。
2012-09-17 17:35:51,881|ERROR|[http-8080-1]:Exception in the filter chain
javax.servlet.ServletException: Servlet execution threw an exception
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
Caused by: java.lang.OutOfMemoryError: Java heap space
at com.sun.facelets.util.FastWriter.overflow(FastWriter.java:50)
at com.sun.facelets.util.FastWriter.write(FastWriter.java:57)
Sep 17, 2012 5:35:51 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
at myApp.DirID.getDirID(DirID.java:27)
at myApp.ErrorFilter.getDirID(ErrorFilter.java:50)
at myApp.ErrorFilter.doFilter(ErrorFilter.java:31)
Sep 17, 2012 5:35:51 PM com.sun.faces.lifecycle.Phase doPhase
SEVERE: JSF1054: (Phase ID: RESTORE_VIEW 1, View ID: ) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@16968dd]
Sep 17, 2012 5:35:51 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.application.ViewExpiredException: viewId:/error.jsf - View /error.jsf could not be restored.