Aplicação "devorando" a memória

Tenho uma aplicação que roda dentro do Tomcat6 e usa CXF( para criar webservices), JPA Hibernate, Quartz. E uso o probe para monitorar as aplicações do tomcat.
Quando o aplicativo é inicializado uma servlet é inicializada para criar um processo que fica indo no banco de segundo em segundo para verificar se existe alguma linha nova em uma determinada tabela.
Depois de inicializar esta aplicação a memória da JVM vai embora, alguém tem alguma idéia do que pode ser?
Teria alguma aplicação que indique aonde ou em qual classe pode estar consumindo a memória?

Abaixo tem o erro que o tomcat mostra:

EVERE: Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/WEB-INF/jsp/errors/servleterror.jsp] javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:274) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39) 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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:424) at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:271) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 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:286) at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:879) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:719) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2080) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.OutOfMemoryError: Java heap space

Configure a memoria do Tomcat para um valor maior:
http://www.pingifes.lcc.ufmg.br/index.php?option=com_simpleboard&Itemid=37&func=view&catid=7&id=83

A jvm está com estas configurações

-Xms256m -Xmx758m

Desculpe tinha esquecido de colocar.

Quanto tem a máquina de memoria?

Falam que 1GB de max da conta do recado , caso esteja estourando mesmo assim e hora de rever sua aplicação.

Vou aumentar e fazer os testes, queria saber se existe alguma aplicação que fique monitorando uma aplicação, que indique os status das threads e que indique aonde tem muito consumo de memória, nas threads…

Existem varias ferramentas, procure por Profiller com tomcat.

Aumentei para 1Giga, mas ainda continua acontencendo, a única diferença é que demora mais para o tomcat morrer.
Fiz a pesquisa que você falou do profiler e achei um que já vem com o netbeans, ainda estou tentando entender as informaçãoes, mas acho que o problema pode estar nas classes de persistências, ou seja, no JPA. Por que eu tenho que ir ao banco, agora de 1 em 1 minuto, seria melhor usar JDBC puro nesta situação?
Outra coisa mesmo a query não retornando nada as classes são instanciadas?

Humm… vc tem que ir ao banco de 1 em 1 minuto? Aparentemente existe alguma configuração no JPA que não esta de acordo com isso, ja procurou verificar?

Saber analisar as informações do seu profiler é primordial nesse caso: poste alguma coisa pra gente te ajudar!

Vi no profiler que ele demorava muito para instanciar uma determinada classe, que no método construtor dela tem o seguinte código:

emf = Persistence.createEntityManagerFactory("SendPU");

Acredito que um dos consumo de memória esteja aqui, porque ao invés de ficar instanciando esta classe toda hora coloquei ela como static, parou de dar OutOfMemory.
Mas deixou a minha apicação bem mais lenta, porque o quartz, que aonde eu faço o agendamento, cria algumas threads e essas trhreads passam a acessar o mesmo objeto, com isso deixando a consulta com o banco mais lenta.
Alguém tem alguma idéia de como solucionar este problema?
Deu para entender ou ficou confuso? heheheheh

Olha, até onde eu sei, vc só cria o seu EntityManagerFactory uma vez. Depois apenas usa essa factory para criar o EntityManger. Isso porque nessa criação vc sempre faz a conexão com o BD e isso consome bastante memória mesmo. Eu uso o Singleton para não ter problema…

O desempenho da minha aplicação ficou melhor, mas gostaria de tentar melhora mais ainda.
Tirei este print do profiler do netbeans e gostaria de saber uma opinião de vocês, se tem como melhorar alguma coisa ou como interpretá-lo para saber se está bom ou ruim.
Desculpe a demora.
Aguém tem algum material que explique sobre o profiler? Como entender os gráficos?