wpjr2’s Weblog

Artigos e tutoriais úteis

java.lang.OutOfMemoryError no Servidor Apache Tomcat

Posted by 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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: