Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
500 java.lang.OutOfMemoryError后重定向_Java_Jsf_Out Of Memory - Fatal编程技术网

500 java.lang.OutOfMemoryError后重定向

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

我有一个JSF应用程序,我想确保当用户在HTTP 500中出错时,它能为用户提供有意义的响应。当我强制执行OutOfMemoryError时,应用程序将死亡,但我从Tomcat 6.0.35获得了一个默认的500错误页面

我的应用程序设置的相关部分包括:

web.xml:

<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页是不可访问的

我的问题是:

  • 如果原因是突然出现内存不足错误,我是否可以从中恢复,以便服务器有足够的资源重定向到my error.jsf页面
  • 如果对1的回答是肯定的,那么什么是最有效的实现方法(最好是通过代码剪断来获得最大的guruness)

  • 谢谢

    基本上,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.