Liberar memória Tomcat

17 respostas
E

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…

17 Respostas

S

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

E

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

E

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…

S

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?

E

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…

S

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!

S

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/

F

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

E

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%…

F

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

E

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…






E

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/


só pra comentar… aumentei o MaxPermSize pra 256m no startup do tomcat…

E

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?

E

é, 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

V

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

E

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.

R

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.

Criado 11 de dezembro de 2010
Ultima resposta 9 de nov. de 2014
Respostas 17
Participantes 5