2011-08-30 49 views
1

我在Spring框架应用程序中出现内存不足错误。我禁用了一些过滤器(如安全过滤器)。但是现在错误发生在JSP页面上。我的JSP页面很重,并使用Tile Framework。java.lang.OutOfMemoryError:JSP页上的Java堆空间

不幸的是,我拥有的主机只提供32 MB的堆空间,我无法增加它。

我在我的布局页添加了几行字:

final long MEGABYTE = 1024L * 1024L; 

// Get current size of heap in bytes 
long heapSize = Runtime.getRuntime().totalMemory(); 
out.println("Total Memory (MB): "+(heapSize/MEGABYTE)); 

// Get maximum size of heap in bytes. The heap cannot grow beyond this size. 
// Any attempt will result in an OutOfMemoryException. 
long heapMaxSize = Runtime.getRuntime().maxMemory(); 
out.println("<br/>Heap Max Size (MB): "+(heapMaxSize/MEGABYTE)); 

// Get amount of free memory within the heap in bytes. This size will increase 
// after garbage collection and decrease as new objects are created. 
long heapFreeSize = Runtime.getRuntime().freeMemory(); 
out.println("<br/>Heap Free Size (MB): "+(heapFreeSize/MEGABYTE)); 

上面打印以下的输出(HTML页)输出

Total Memory (MB): 29 
Heap Max Size (MB): 29 
Heap Free Size (MB): 3 

这里是堆栈跟踪:

javax.servlet.jsp.JspException: ServletException in '/jsp/fragments/account/newAccount.jsp': java.lang.OutOfMemoryError: Java heap space 
at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:921) 
at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:460) 
at org.apache.jsp.jsp.common.tiles.layout_jsp._jspx_meth_tiles_005finsert_005f3(layout_jsp.java:818) 
at org.apache.jsp.jsp.common.tiles.layout_jsp._jspService(layout_jsp.java:428) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
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:654) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292) 
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
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.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) 
at java.lang.Thread.run(Thread.java:662) 
+0

你的问题是什么?我想我们需要一些代码才能够帮助你。 – Shaded

+1

我的问题是,我想通过使用一些减少内存空间或类似内容的JSP最佳实践,甚至在32 MB空间中摆脱Out of Heapspace错误。 –

回答

4

I have is providing only 32 MB of heap space and I could not increase that..

对不起,但那是那么故事的结尾。您有2个选项:

  • 重写您的视图以提高内存效率。也许你需要回归普通的香草JSP/Servlet,而没有任何额外的框架,每个框架当然都需要自己的内存共享。

  • 给服务器更多的内存。升级您现有的托管帐户或迁移到其他主机。

2

剖析应用程序可能是一个选项,它会给你洞察到什么是真正引起内存不足的错误,如果它是真的有可能在不增加物理内存来优化代码。