1

我遇到了一个问题,即Java webapp运行时引发Tomcat了很多java.lang.OutOfMemoryError错误,但没有生成堆。

我通过以下CATALINA_OPTS方式启用了以下标志setenv.sh

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/

这以前有效,但由于某种原因,现在不行。

通常我会在 中看到Dumping heap to /path/to/heap/dir/catalina.out但这次不会。

从输出中可以看出,VM 选项肯定是启用的ps

heap目录有足够的空间和写权限(我觉得这种IO异常其实是有记录的)

OutOfMemory 是由于在via taglibs 中XSL Transformation发生的严重事件而引起的。JSP

堆栈如下所示:

Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.OutOfMemoryError
    at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:861)
    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:794)
    at org.apache.jsp.WEB_002dINF.jsp.portlets.item_005fsearch.result.view_jsp._jspService(Unknown Source)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
    at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:229)
    at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
    at org.springframework.web.servlet.ViewRendererServlet.renderView(ViewRendererServlet.java:114)
    at org.springframework.web.servlet.ViewRendererServlet.processRequest(ViewRendererServlet.java:86)
    at org.springframework.web.servlet.ViewRendererServlet.doGet(ViewRendererServlet.java:66)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
    at org.exoplatform.services.portletcontainer.plugins.pc.portletAPIImp.PortletRequestDispatcherImp.include(PortletRequestDispatcherImp.java:149)
    ... 88 more

Caused by: java.lang.OutOfMemoryError
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getTransletInstance(TemplatesImpl.java:353)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.newTransformer(TemplatesImpl.java:382)....

我试图了解,在什么情况下 OutOfMemoryError 不会触发堆转储。

提前致谢。

将要

4

0 回答 0