2017-03-13 3 views
0

웹 페이지에서 선택한 텍스트의 명사를 추출하고 텍스트가 표시되면이를 강조하고 싶습니다. 따라서 OpenNLP 라이브러리를 사용하여 구문 분석 및 목록을 가져옵니다. 명사의. 이 출력을 표시하기 전에 6~7초했다하지만 그것은 메모리 문제없이 자바 클래스에서 잘 실행하지만 JSP 페이지의 코드를 실행할 때, 나는이 오류가있어 :javax.servlet.ServletException : java.lang.OutOfMemoryError : 자바 힙 공간

javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838) 
    org.apache.jsp.highlightText_jsp._jspService(highlightText_jsp.java:294) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

근본 원인

java.lang.OutOfMemoryError: Java heap space 
    opennlp.model.AbstractModelReader.getParameters(AbstractModelReader.java:144) 
    opennlp.maxent.io.GISModelReader.constructModel(GISModelReader.java:75) 
    opennlp.model.GenericModelReader.constructModel(GenericModelReader.java:59) 
    opennlp.model.AbstractModelReader.getModel(AbstractModelReader.java:87) 
    opennlp.tools.util.model.GenericModelSerializer.create(GenericModelSerializer.java:35) 
    opennlp.tools.util.model.GenericModelSerializer.create(GenericModelSerializer.java:31) 
    opennlp.tools.util.model.BaseModel.loadModel(BaseModel.java:231) 
    opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:181) 
    opennlp.tools.postag.POSModel.<init>(POSModel.java:82) 
    opennlp.tools.parser.ParserModel$POSModelSerializer.create(ParserModel.java:49) 
    opennlp.tools.parser.ParserModel$POSModelSerializer.create(ParserModel.java:45) 
    opennlp.tools.util.model.BaseModel.finishLoadingArtifacts(BaseModel.java:303) 
    opennlp.tools.util.model.BaseModel.loadModel(BaseModel.java:240) 
    opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:181) 
    opennlp.tools.parser.ParserModel.<init>(ParserModel.java:152) 
    model.parser.parserAction(parser.java:59) 
    org.apache.jsp.highlightText_jsp._jspService(highlightText_jsp.java:143) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
set CATALINA_OPTS=-Xms256m -Xmx512m 

그래서 난 -Xmx2g로 설정하지만 여전히 같은 오류를 제공합니다 : 내가 읽은

일부 솔루션은이 작업을 수행하여 아파치 톰캣의 힙 메모리의 크기를 증가하는 것이 좋습니다. 나는 JVM 힙 크기 (Netbeans> Properties> Run> VM Options> -Xmx에서 프로젝트를 마우스 오른쪽 단추로 클릭)를 수정해야한다고 생각하지 않지만 시도해 보았지만 성공하지 못했습니다.

전에이 오류가 발생하지 않았으므로 어떻게해야하는지 잘 모릅니다. 감사합니다, 감사합니다.

+0

코드를 프로파일 링하고 생성 된 객체와 최대 메모리, 메모리 누수 가능성 등을 확인 했습니까? 귀하의 오라클 JDK는 당신을 시작할 수있는 VisualVM과 함께 제공됩니다. – anacron

+0

이 방법으로 NetBeans 힙 공간은 증가하지만 Tomcat 힙 공간은 증가하지 않습니다. jconsole 또는 visualvm을 사용하여 tomcat에 연결하고 힙이있는 메모리의 수를 확인하십시오. – malaguna

답변

0

그런 문제의 경우 VisualVM과 같은 도구를 사용할 수 있습니다. JDK와 함께 jdk1.8.0_xxx\bin\jvisualvm.exe 번들로 제공되며 구성없이 로컬 JVM에 연결할 수 있습니다. 이 도구를 사용하면 응용 프로그램의 메모리가 부족한 곳과 이유를 찾을 수 있습니다.

0

java.lang.OutOfMemoryError : Java 힙 공간 오류는 응용 프로그램이 힙 공간 영역에 더 많은 데이터를 추가하려고 시도 할 때 트리거되지만 공간이 충분하지 않습니다. Java에서 OutOfMemoryError를 쉽게 해결할 수있는 방법은 이미 시도한 JVM 옵션 "-Xmx512M", 을 사용하여 최대 힙 크기를 늘리는 것입니다.

Java에서 OutOfMemoryError를 해결하는 두 번째 방법은 Eclipse 메모리 분석기를 사용하여 힙 덤프를 검사하거나 Netbeans 또는 JProbe와 같은 프로파일 러 을 사용할 수 있습니다.

귀하의 경우에는 웹 페이지에서 명사를 추출하고 강조 표시하려고 할 때도 마찬가지입니다. 그래서 코드에서 특정 조건에서 무한 루프로 판명 된 루프가 있는지 알아보십시오.

+0

응용 프로그램에서 메모리 누수가 발생할 가능성이 있기 때문에 힙 크기를 늘리면 문제가 해결되지 않고 지연됩니다. – EJP

0

힙 메모리를 2GB로 늘려도 여전히 문제가 있다고 언급 했으므로 코드에 메모리 누수가 있음을 알 수 있습니다. 사용되지 않는 객체는 가비지 컬렉터에 의해 제거 될 수 있도록 참조 해제되지 않습니다.

실제로 필요한 것보다 많은 힙 메모리를 사용하면 성능에 영향을 미칩니다. 힙 메모리를 과도하게 공급한다고해서 문제가 해결되는 것은 아닙니다. 대신 성능이 좋지 않습니다 (긴 정지 시간). 임의의 프로파일 러 (Java Mission Control, Java Visual VM, Your Kit Java 프로파일 러 등)를 사용하여 코드를 프로파일 링하여 어떤 오브젝트가 힙에서 더 많은 메모리 공간을 차지하는지 확인해야합니다. 코드를 공유 할 수 있다면 정확히 메모리 누수가 발생한 위치를 찾을 수 있습니다.

관련 문제