Liberar memória Tomcat

Olá Pessoal!

Estava fazendo testes aqui com web service utilizando Tomcat + Axis e notei que a cada pesquisa no banco de dados do servidor, o uso de memória do tomcat aumenta e não baixa mais, porém ele chega num limite que não aumenta mais (provavelmente o tamanho máximo estipulado pela JVM), mas também não baixa.

Tem alguma forma de eu prevenir esse aumento? Tenho que limpar as listas a cada consulta?
Obs.: Eu achava que o garbage collector fazia isso automaticamente, ainda mais por essas listas serem variáveis de métodos…

Obrigado a todos…

certifique-se de que vc esta fechando as conexoes com o webservice. Pois se vc as deixa aberta, elas ficam consumindo memoria!

Mas no lado servidor?
O problema de consumo de memória está no servidor e não no cliente…

o engraçado é que a memória aumenta 7% em menos de 5 minutos de acesso ao sistema e não baixa mais… porém chega a um ponto que não sobe mais também…

não sei se isso é normal ou se realmente preciso esvaziar as listas via programação…

obs.: todas as conexões com o banco estão sendo fechadas…

Intendi, li mau seu post. É anormal isso acontecer mesmo. Ainda mais que vc esta fechando as conecções com o BD. Vc está está usando algum fream de persistencia ou está usando jdbc puro?

JDBC puro…

se eu alterar os argumentos de memória máxima e mínima da JVM para o Tomcat, pode adiantar alguma coisa?

Obrigado…

Cara, vc só vai adiar o inevitavel…pq uma hora vai acontecer o erro de “PermGen”. Vc deve encontrar o ponto onde esse aumento de memória está ocorrendo. Vc pode tentar chamar o Gc, sei que não é garantia nenhuma de que ele vá passar na hora de sua chamada e tbm não é nem um pouco elegante chama-lo em codigo, mas faz esse teste e vê se o consumo volta ao normal. Vc pode fazer tbm testes unitários em seus metodos, pra ver o quanto de memória cada metodo está usando, só assim vc vai ter uma vizualizção melhor do problema e tbm vai identificar o ponto onde ele ocorre!

Dá uma olhada nesse link. Vc pode aumentar o PermGen, mas ainda assim vc deve verificar o pq desse aumento considerável no uso da memoria.

http://codare.net/2007/01/11/java-solucionando-o-erro-de-permgen-space/

Use o Profiler do NetBeans e acompanhe o que está consumindo memória.
http://profiler.netbeans.org/

obrigado pela ajuda dos dois…

vou fazer testes aqui com o gc pra ver se muda alguma coisa… caso nao der aí eu tento um profiler.

mas o profiler vai servir pra monitorar o comportamento do Tomcat no servidor? Acho que vou tentar algum monitor no estilo VisualVM também…

Esse aumento de memória do tomcat definitivamente não é normal? Pois chega a um determinado ponto que ele não sobe mais, sendo que nao perde em performance pois os webservices continuam rodando da mesma forma…

e esse aumento é independente, o tomcat vai de 3% até aproximadamente 8% do consumo de memória total do servidor… isso nos 30 primeiros segundos de acesso ao sistema, praticamente. E aí depois acontece o que eu comentei, que ele nem sobe nem abaixa dos 8%…

Pode te ajudar:
http://stackoverflow.com/questions/324499/java-still-uses-system-memory-after-deallocation-of-objects-and-garbage-collectio
http://stackoverflow.com/questions/675589/jvm-sending-back-memory-to-os

valeu pela ajuda…

tirei prints com o VisualVM de vários monitoramentos (Threads, Memória, Tamanho do Heap, Heap Ocupado, PermGen…)
se alguém quiser olhar, notem algumas Threads com nome “http-8080-1… 2… 3… 4” não sei se isso é normal…

quanto ao PermGen, ele aumenta gradativamente, mas mesmo forçando um gc ele não baixa…






[quote=starkiller]Dá uma olhada nesse link. Vc pode aumentar o PermGen, mas ainda assim vc deve verificar o pq desse aumento considerável no uso da memoria.

http://codare.net/2007/01/11/java-solucionando-o-erro-de-permgen-space/[/quote]
só pra comentar… aumentei o MaxPermSize pra 256m no startup do tomcat…

Pessoal… acho que o problema está em fazer hot deploy… a Thread da minha aplicação que limpa as sessões simplesmente não é parada pelo tomcat ao fazer o deploy…
como poderei fazer o hot deploy parar a minha Thread que fica rodando no tomcat?

é, fiz mais uns testes aqui e realmente mesmo fazendo undeploy a Thread não para, fazendo com que ela seja removida após realizar a próxima operação (fica em sleep por 4 dias). Então como as variáveis estão nulas, estoura NPE e sai da Thread, finalizando-a…

Tem alguma outra maneira de eu forçar a interrupção das threads utilizadas pela aplicação no undeploy pelo Tomcat?

Fico grato pela ajuda

já faz alguns anos esse post.
mas como resolveu?

Cara na verdade já mudei bastante a estrutura da minha aplicação desde que fiz este post. Agora to utilizando pool de conexões do BoneCP e não utilizo mais nenhuma Thread que fica rodando em paralelo pois tudo que preciso executar eu faço por um listener no startup e no undeploy da aplicação.

De qualquer maneira no server de produção deixei liberado um pouco mais no PermGen devido a quantidade de aplicações ativas simultaneamente, mas nunca tive estouro de memória (tenho aproximadamente 50 aplicações com média de acesso de 3 usuários cada).

Qualquer coisa abre um post novo explicando o seu caso, acho que seria mais útil.

Olá Prezados boa noite!

Falando de memoria estou há semanas observando um servidor que ao meu ver esta com um comportamento bem estranho em relação a outros, ele é uma maquina com 4GB, Windows Server 2008 de 64bits, com Java 7 e Tomcat 7

Configurei o tomcat com initial memory pool 128 e final 1024 e -XX:MaxPermSize=512m
neste momento parei o serviço e ao iniciar o tomcat e entrar no aplicativo vejo pelo gerenciador de tarefas observo que 82% de memoria fisica ( mais estava a 95% antes da parada e 50% de CPU) na qual o tomcat esta com 565.700 K, tenho outro tomcat nesta mesma maquina mais este esta ocupando apenas 170.050 K e o SQL Server neste inicio mostra apenas 109.000K mais chega com os 7 usuários 800.00 até 1.000.000

A ocupacao da memoria em 95% é algo que eu não tenho visto em outros clientes, se bem que passou a semana assim e não houve reclamação hoje no fim de semana parei o serviço.

Não tenho bagagem para usar as informações do probe e tomar alguma decisão, até procurei informações mais são poucas.
Vou anexar imagens que obtive do probe neste momento em que eu parei o aplicativo, se alguem puder me dar alguma dica agradeço qualquer dica que possa me ajudar a ver a questão.