Aplicação "devorando" a memória  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

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:

This message was edited 1 time. Last update was at 20/03/2009 14:53:47


www.bau-de-dev.com
Pedrosa
JWizard
[Avatar]

Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline

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

Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

A jvm está com estas configurações



Desculpe tinha esquecido de colocar.

www.bau-de-dev.com
Pedrosa
JWizard
[Avatar]

Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline

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.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

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

www.bau-de-dev.com
Pedrosa
JWizard
[Avatar]

Membro desde: 13/07/2005 13:08:08
Mensagens: 2505
Localização: São Paulo - Brasil
Offline

Existem varias ferramentas, procure por Profiller com tomcat.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

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?

www.bau-de-dev.com
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

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!

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

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



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

www.bau-de-dev.com
renzonuccitelli
GUJ Master

Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline

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

Renzo Nuccitelli

Engenheiro de Computação - ITA

http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

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?
[Thumb - print_profiler.jpg]
 Nome do arquivo print_profiler.jpg [Disk] Download
 Descrição imagem do profiler
 Tamanho 297 Kbytes
 Baixado:  52 vez(es)


www.bau-de-dev.com
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team