Java.lang.OutOfMemoryError: Java heap space

12 respostas
E

Bom dia pessoal, o que pode ser este erro?
O seguinte em “PRODUÇÃO” quando eu clico para ir para outra pagina “especificamente” aparece no browser Java heap space - java.lang.OutOfMemoryError: Java heap space

quando eu vou ver o log do tomcat esta assim:

log catalina.out: 
May 23, 2011 9:43:32 AM com.sun.faces.context.SessionMap put
WARNING: JSF1063: WARNING! Setting non-serializable attribute value into HttpSession (key: albumVisualizacaoMB, value class: apresentacao.AlbumVisualizacaoMB).
May 23, 2011 9:43:32 AM org.primefaces.util.ComponentUtils findClientIds
INFO: Cannot find component with identifier "dlgFotoGrande" in view.
May 23, 2011 9:43:33 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
at com.sun.faces.context.flash.ELFlash.getPhaseMapForReading(ELFlash.java:748)
at com.sun.faces.context.flash.ELFlash.isEmpty(ELFlash.java:466)
at com.sun.faces.facelets.util.DevTools.writeVariables(DevTools.java:318)
at com.sun.faces.facelets.util.DevTools.writeVariables(DevTools.java:208)
at com.sun.faces.facelets.util.DevTools.debugHtml(DevTools.java:123)
at com.sun.faces.renderkit.RenderKitUtils.renderHtmlErrorPage(RenderKitUtils.java:1139)
at com.sun.faces.context.ExceptionHandlerImpl.throwIt(ExceptionHandlerImpl.java:249)
at com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:136)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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:191)
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:293)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
May 23, 2011 9:52:21 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.OutOfMemoryError: GC overhead limit exceeded

em desenvolvimento não da este problema, o que pode ser?

obrigado

12 Respostas

magnojg

erickfm8, provavelmente é a configuração da memória na VM, dá uma olhada neste link: http://www.guj.com.br/java/43775-javalangoutofmemoryerror-java-heap-space, talvez ajude.

E

não resolveu, meu erro que da outra coisa…
no browse agora gero

java.lang.OutOfMemoryError: Java heap space
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3038)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2978)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3526)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:934)
	at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1432)
	at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2923)
	at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:479)
	at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2618)
	at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1787)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2208)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2281)
	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
	at org.hibernate.loader.Loader.getResultSet(Loader.java:1953)
	at org.hibernate.loader.Loader.doQuery(Loader.java:802)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
	at org.hibernate.loader.Loader.loadCollection(Loader.java:2166)
	at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:62)
	at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:627)
	at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:83)
	at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1863)
	at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:479)
	at org.hibernate.engine.StatefulPersistenceContext.initializeNonLazyCollections(StatefulPersistenceContext.java:900)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:279)
	at org.hibernate.loader.Loader.doList(Loader.java:2533)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
	at org.hibernate.loader.Loader.list(Loader.java:2271)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)

e no log do tomcat nao apareceu nada

o que pode ser pessoal?

Priuli

Este problema pode ser resolvido aumentando o espaço de memóriaheap que vai ser utilizado pelo tomcat para ‘deployar’ a tua aplicação, isso pq o tomcat não consegue alocar mais memória heap para a tua aplicação pois esta no limite. Este limite é configurado quando vc inicia o tomcat, c vc aumentar tera mais memoria e provavelmente não tera este erro, a não ser se tua aplicação consumir toda a memoria a mais.

Sugiro vc a não fazer hot deploy pois existe um bug no tomcat que o mesmo não limpa a memória corretamente deixando a mesma cheia.
Mas para corrigir o problema vc pode aumentar o limite de memória para a sua aplicação…

no jboss eu coloco este comando para aumentar o tamanho na mem… -XX:MaxPermSize=256m

E

o que seria o hot deploy ?

Estranho que em desenvolvimento não da este erro, somente em produção

quebrado

Verifica quantos registros que vc esta retornando nesta query.
Outro dia tive o mesmo problema e o erro estava no retorno gigante da query que fiz.
t+

Priuli

hot deploy é vc subir a sua aplicação war sem parar o servidor. o ideial é vc parar o tomcat colocar o war na pasta de deploy e depois subir…

é assim mesmo, quando vc esta no desenvolvimento geralmente vc usa menos recursos tem menos aplicação no tomcat e tb vc usa por pouco tempo. Vc tem que analisar o quanto sua aplicação esta consumindo de memoria heap e configurar o XXMaxPermSize. + se vc aumentar a memoria como eu falei e continuar apresentando o mesmo problema ai pode ser um bug, ou uso incorreto de algum recurso q esta consumindo a memoria heap, como por exemplo: vc fizer uma query e trazer todos os registros pra memoria não há memoria que aguente…
http://www.viamais.net/blog/?p=895

E

é poucos registro , uns 10,

pode ter algo haver o hot deploy pois todas avezes eu fiz isso…vou verificar

não tem mta diferença para o produção , pois o de produção ATUALMENTE eu mesmo testo 10 registross, e que tem fotos armazenada diretamento no banco,pode ser um ponto tbm,

bom vou enviar um war , mais antes vou pausar o servidor,

amanha deixo retorno aqui

maior_abandonado

você precisa de um ambiente de testes igual ao de produção para testar… ai vai achar o gargalo… ainda que debugando

E

O ambiente realmente esta identico ao de produção, porem começou a dar este erro

http://www.guj.com.br/java/242690-excecao-do-jsf

sera que tem algo haver?

E

Outra coisa na hospedagem a VM esta com 128 MB, é pouco?

maior_abandonado

depende do que você está fazendo… use as mesmas configurações de memória no seu ambiente de testes e veja se da algum problema… se for o caso debugue… va passando linha a linha…

a e o problema descrito no link, do faces, quando tive ele, peguei as libs e as inseri no projeto na web-inf/lib e resolveu…

ViniGodoy

E use um profiler para descobrir porque seu programa está consumindo tanta memória:
http://visualvm.java.net/

Criado 23 de maio de 2011
Ultima resposta 29 de mai. de 2011
Respostas 12
Participantes 6