Boa noite pessoal,
estou com o seguinte cenário.
Tenho um sistema web que gera NFC-e através da biblioteca do Samuk - ótima por sinal.
O sistema roda em Tomcat 8.5 e java 8.
Hoje a aplicação está rodando para somente 3 usuários que ficam logados através do session.
O que acontece é que o tomcat conforme o tempo sendo executado vai aumentando a memória também aumenta…
Segue abaixo imagem:
Como podem ver a memória vai aumentando conforme os dias passam…
Já efetuei testes na minha máquina, e quando vou gerar uma NFC-e realmente a memória do tomcat salta de 300mb para 600 ~700mb, porém volta ao “normal” 250mb depois…
No servidor a memória não volta ao normal, só aumenta.
Alguém já passou por isso?
Efetuei testes, verifiquei a estrutura do projeto e nada… se alguém puder ajudar ficaria muito agradecido…
forte abraço, valeu
Opa,
a memória ficar subindo e descendo é super normal, isso se chama Garbage Collector.
O quando ela sobe depende da sua programação, alocação de memória em objetos, consultas…
Caso ela fique subindo mais do que baixando até encher a memória ai provavelmente vc tem um vazamento de memória, que na maioria das vezes é causado pela sua programação(código, não configuração). Por exemplo: uma lista em memória onde objetos só são adicionados e nunca removidos, coisas assim…
Fala Rodrigo, mto obrigado pelo retorno.
Isso da memória ficar subindo e descendo eu to ligado, o problema é que ela nunca desce ;/
Vou tentar implementar essa parte “Por exemplo: uma lista em memória onde objetos só são adicionados e nunca removidos, coisas assim…”
Achei qu eo Garbage Collector fazia essa parte. No caso seria depois de usar as variáveis vou começar a setar como null para forçar o GC a remover elas da memória.
Valeu pelo retorno
Pq fazer isso? quer forçar um vazamento de memoria?
Na verdade vc n consegue forçar GC a nada, nem chamando System.gc o força a fazer garbage.
Na programação n me preocupo e ficar setando null é só cuidar pra n manter uma referencia em uso daquele objeto, tomar cuidado com tudo que for static ou singleton.
Setar uma var como null ajuda a tirar a referencia desta variável, mas a maioria dos memory leaks acontecem com objetos conhecidos que ficam engordando em memória. No final da execução de um método todas variáveis criadas nele ficam na lista do GC, exceto aquelas que ficaram referenciadas por algum outro objeto externo.