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…
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?
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!
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%…
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.
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?
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.
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.