2011-08-30 30 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

剖析應用程序可能是一個選項,它會給你洞察到什麼是真正引起內存不足的錯誤,如果它是真的有可能在不增加物理內存來優化代碼。