java.lang.OutOfMemoryError no Servidor Apache Tomcat
Publicado por wpjr2 em Junho 2, 2008
![]()
Segue abaixo um problema que um de meus alunos do curso de Struts teve ao configurar uma aplicação Web no servidor Tomcat. Pude auxiliá-lo na resolução do problema e pedi a ele que escrevesse um post apresentando o problema e a solução do mesmo. Este post com certeza será útil para outras pessoas que venham a ter o mesmo problema.
Por Rafael Diego
Possuo um servidor com o FreeBSD e sistema Java Web, que faz conexão com um BD, existente que rodava normalmente no servidor, sobre o Tomcat 5.5, ainda estava exibindo a tela de Login.
O usuário conseguia logar e visualizar o menu principal. Porém, quando clicava em qualquer submenu, o redirecionamento demorava alguns segundos (mais que o normal) e era exibida uma mensagem de erro, provida pelo próprio Tomcat:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.OutOfMemoryError: Java heap space
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:842)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.pages.cadastro_005famostra_jsp._jspService(cadastro_005famostra_jsp.java:149)
org.apache..jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet..JspServlet.service(JspServlet.java:236)
javax.servlet..http.HttpServlet.service(HttpServlet.java:802)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:142)
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)
root cause
javax.faces.el.EvaluationException: java.lang.OutOfMemoryError: Java heap space
com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:185)
com.sun.faces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:136)
javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:308)
javax.faces.webapp.UIComponentTag.isSuppressed(UIComponentTag.java:828)
javax.faces.webapp.UIComponentTag.doStartTag(UIComponentTag.java:460)
com.sun.faces.taglib.html_basic.PanelGridTag.doStartTag(PanelGridTag.java:436)
org.apache.jsp.pages.cadastro_005famostra_jsp._jspx_meth_h_panelGrid_0(cadastro_005famostra_jsp.java:269)
org.apache.jsp.pages.cadastro_005famostra_jsp._jspx_meth_h_form_0(cadastro_005famostra_jsp.java:221)
org.apache.jsp.pages.cadastro_005famostra_jsp._jspx_meth_f_view_0(cadastro_005famostra_jsp.java:191)
org.apache.jsp.pages.cadastro_005famostra_jsp._jspService(cadastro_005famostra_jsp.java:139)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet..serviceJspFile(JspServlet.java:292)
org.apache.jasper..servlet.JspServlet.service(JspServlet.java:236)
javax..servlet.http.HttpServlet.service(HttpServlet.java:802)
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:142)
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)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.30 logs.
Após consulta na Internet, pelos sites de busca, fóruns e pedindo auxílios à outras pessoas e ainda tentando entender a mensagem de erro, vi que era problema de “memória insuficiente” alocada para a JVM.
Encontrei o seguinte comando que setava o tamanho de memória utilizado pela JVM:
export CATALINA_OPTS=”-Xms256m -Xmx512m”
Este comando seta a memória mínima (Xms) em 256MB e a memória máxima a ser usada (Xmx) em 512MB.
Adicionei o comando nas configurações do arquivo catalina.sh. Após reiniciar o servidor, o problema foi corrigido.
Agora, minha aplicação roda com memória entre 256 e 512MB.