Memória insuficiente ao recuperar resultados da consulta



  • Amigos, estou com um problemão... ao clicar num botão que realiza consultas e envia e-mail, recebo esta mensagem e o fluxo é encerrado:

    org.postgresql.util.PSQLException: [b]Memória insuficiente ao recuperar resultados da consulta[/b]. at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1817) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) at wfr.database.PagedResultSet.openResultSet(PagedResultSet.java:135) at wfr.database.PagedResultSet.open(PagedResultSet.java:89) at wfr.database.WFRResultSet.open(WFRResultSet.java:126) at wfr.database.DBConnection.refreshResultSet(DBConnection.java:1332) at wfr.sys.WFRData.refreshData(WFRData.java:425) at wfr.sys.HTMLInterface.HTMLForm.refreshAll(HTMLForm.java:1174) at wfr.sys.HTMLInterface.HTMLForm.cancelUpdates(HTMLForm.java:1095) at wfr.sys.HTMLInterface.HTMLForm.cancelUpdates(HTMLForm.java:1034) at wfr.sys.HTMLInterface.HTMLForm.end(HTMLForm.java:982) at wfr.web.actions.FormAction.execute(FormAction.java:104) at wfr.web.Action.doAction(Action.java:126) at wfr.web.Controller.process(Controller.java:130) at wfr.web.Controller.doPost(Controller.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at wfr.web.ContextFilter.doFilter(ContextFilter.java:87) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2462) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2451) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.OutOfMemoryError: Java heap space

    Causa:
    java.lang.OutOfMemoryError: Java heap space


    O que pode ser isso e o que devo fazer??? Agradeço muito se puderem me ajudar. :roll:


  • Como o erro já sugere, o resultado da consulta depende de muita memória para processar.

    Verifica se realmente precisa de todos os campos ou todos os registros. É interessante também verificar se tem campos blobs (ou equivalentes) com registros gigantes.


  • Bom dia Ronélio, no caso de "blobs" você deve se referir aos campos de imagem que possuo no formulário. Tenho vários campos do tipo imagem, mas são essenciais para o formulário. O que devo fazer nesse caso? Os registros não poderão ser excluídos de maneira automática, uma vez em que o administrador necessitará dos registros salvos no momento em que necessitar fazer download das imagens. O cliente insere a(s) imagens, realiza o registro e salva, o administrador faz o download dessas imagens para salvar no sistema.


  • a memória que este erro acusa é a memória disponível para o webrun?


  • [quote="erickamaral"]a memória que este erro acusa é a memória disponível para o webrun?[/quote] Sim.


  • Aumentei a memória dedicada pra o uso do webrun e até agora nenhum erro. Acho que agora resolveu. Enfim, mas quer dizer que quanto maior o banco for ficando de informações mais memória terá que ser dedicada ao webrun? Se for isso meu formulário não terá sentido, pois um dos objetivos dele é protocolar informações... É isso? Além dessa dúvida, por gentileza me tira mais uma Ronélio. Quais as consequências de eu não utilizar a função ''fechar consulta'' em um fluxo onde existem consultas na sql?


  • [quote="erickamaral"]Aumentei a memória dedicada pra o uso do webrun e até agora nenhum erro. Acho que agora resolveu. Enfim, mas quer dizer que quanto maior o banco for ficando de informações mais memória terá que ser dedicada ao webrun? Se for isso meu formulário não terá sentido, pois um dos objetivos dele é protocolar informações... É isso? [/quote] Isso é relativo de cada negócio. Ex.: Imagine que vc tem um campo que permita o usuário inserir arquivos de 30~40~400mb por exemplo. Carregar isso vai ser custoso sim. O ideal é limitar o tamanho ou escrever em arquivo.

    [quote="erickamaral"]Além dessa dúvida, por gentileza me tira mais uma Ronélio. Quais as consequências de eu não utilizar a função ''fechar consulta'' em um fluxo onde existem consultas na sql? [/quote] As consultas padrão são fechadas automaticamente pelo Webrun ao finalizar o fluxo. Exceto as não "gerenciadas" que são aquelas obtidas através da função abrir consulta não gerenciada ou tornar consulta não gerenciada. Daí terá que fechar manualmente.

    Não fechar as consultas implica em objetos carregados na memória e também pode sobrecarregar o banco de dados.


  • Entendi Ronélio, então vou ter que incluir essa função nos meus formulários... Como relação à outra dúvida, eu resolvi utilizar um campo do tipo imagem porque eu não consegui criar uma regra na função upload pra além de permitir apenas arquivos em pdf, limitar o tamanho deles... Você teria um exemplo dessa regra?


  • Erick, a implementação disto é bem simples. A própria função Upload já passa as informações de nome, tipo e tamanho do arquivo a ser upado. Fiz um exemplo obtendo o tamanho do arquivo e deixando realizar somente caso o tamanho do arquivo seja menor que 200 bytes. Para obter o tipo do arquivo, mude a posição da lista para 3 e altere a lógica de verificação do segundo fluxo.
    [635_exemplouploadcomverifica__o.frz](/assets/uploads/files/635_exemplouploadcomverifica__o.frz)


  • Oi Gabriel, boa tarde amigo. Vou dar uma olhada no fluxo e tentar fazer como você disse. Te respondo em breve, blz?

Log in to reply