2015-01-05 36 views
0

나는 java.lang.OutOfMemoryError: Java heap space을 얻고 있으며 그것을 피하는 방법을 모르겠습니다. 나는 기본적으로 소켓 버퍼라고 생각했던 것에 대해 쓰고있다. 나는 그것이 javax.servlet.jsp.JspWriter라고 생각한다.내 JSF 코드가 "java.lang.OutOfMemoryError : Java heap space"를 얻는 방법은 무엇입니까?

그러나 매우 큰 HTML 파일 인 ~ 70 만 줄을 쓸 경우 java.lang.OutOfMemoryError: Java heap space이됩니다. 프레임 워크가 소켓에 플러시되지 않는 이유를 혼란스러워했습니다. (Marsha, Marsha, Marsha) 제쳐두고, 버퍼를 자라기보다는 소켓에 플러시 할 수 있습니까?

JSF 1.1을 사용하고 있습니다.

참고,이 web.xml 파일을 추가하려고 않았다

<context-param> 
    <param-name>facelets.BUFFER_SIZE</param-name> 
    <param-value>500000</param-value> 
</context-param> 

아무것도 변경하는 것 같지 않았어요. 여기

<html> 
    <f:view> 
     <head> 
      <title>Test</title> 
     </head> 
     <body id="page_body" 
      <h:form id="form"> 
       <% 
        String s; 
        for (int i = 0; i < rowCount; i++) { 
         s = data.get(i); 
         out.println(s); 
         //flush after on every thousandths row. 
         //if(i%1000==1) 
         //   out.flush(); 
        } // for loop 
       %> 
      </h:form> 
     </body> 
    </f:view> 
</html> 

내가 얻을 예외 :

org.apache.jasper.JasperException: org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322) 
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130) 
    test.CustomLocaleRemapViewHandler.renderView(CustomLocaleRemapViewHandler.java:94) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) 
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198) 
    test.CustomFilter.doFilter(CustomFilter.java:46) 
    test.CustomFilter2.doFilter(CustomFilter2.java:81) 
    org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144) 


root cause 

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:746) 
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716) 
    org.apache.jsp.test2_jsp._jspService(test2_jsp.java:122) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322) 
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130) 
    test.CustomLocaleRemapViewHandler.renderView(CustomLocaleRemapViewHandler.java:94) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) 
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198) 
    test.CustomFilter.doFilter(CustomFilter.java:46) 
    test.CustomFilter2.doFilter(CustomFilter2.java:81) 
    org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144) 


root cause 

javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841) 
    org.apache.jsp.test_jsp._jspService(test_jsp.java:745) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:746) 
    org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716) 
    org.apache.jsp.test2_jsp._jspService(test2_jsp.java:122) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322) 
    com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130) 
    test.CustomLocaleRemapViewHandler.renderView(CustomLocaleRemapViewHandler.java:94) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87) 
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:198) 
    test.CustomFilter.doFilter(CustomFilter.java:46) 
    test.CustomFilter2.doFilter(CustomFilter2.java:81) 
    org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144) 


root cause 

java.lang.OutOfMemoryError: Java heap space 
    java.util.Arrays.copyOf(Unknown Source) 
    java.io.ByteArrayOutputStream.grow(Unknown Source) 
    java.io.ByteArrayOutputStream.ensureCapacity(Unknown Source) 
    java.io.ByteArrayOutputStream.write(Unknown Source) 
    sun.nio.cs.StreamEncoder.writeBytes(Unknown Source) 
    sun.nio.cs.StreamEncoder.implWrite(Unknown Source) 
    sun.nio.cs.StreamEncoder.write(Unknown Source) 
    java.io.OutputStreamWriter.write(Unknown Source) 
    java.io.PrintWriter.write(Unknown Source) 
    java.io.PrintWriter.write(Unknown Source) 
    test.CustomWrapper$CustomPrintWriter.write(CustomWrapper.java:82) 
    org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:119) 
    org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:336) 
    java.io.Writer.write(Unknown Source) 
    com.sun.faces.renderkit.html_basic.HtmlResponseWriter.write(HtmlResponseWriter.java:519) 
    com.sun.faces.taglib.jsf_core.ViewTag.doAfterBody(ViewTag.java:196) 
    org.apache.jsp.test_jsp._jspService(test_jsp.java:725) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

BTW, BalusC가, 거기 밖으로 도와주세요 경우

여기에 내 코드 샘플입니다. 압력, 롤. JSF 질문의 절반 정도를 대답합니다.

그레이드

+0

을 내보내십시오. 작은 파일은 문제없이 작동한다는 것을 의미합니다. 그 맞습니까? – kolossus

+0

@koloossus 네, 잘 작동합니다. BodyContentImpl이 소켓에 쓰는 것이 아니라 char [] cp에 쓰는 것 같습니다. –

+0

아무 것도 다른 출력에 임의로 쓰려고하지 않습니다. 힙을 압도하는 데이터 양의 간단한 경우입니다. 미세 조정을 위해 힙 크기 설정을 수정하십시오 – kolossus

답변

0

힙 크기를 늘리려면 -Xmx를 사용해보십시오.
apache tomcat의 경우, 즉 CATALINA_OPTS = "- Xmx1024M"