Bom dia!
Tenho uma aplicação console que roda em um servidor incianco o servico com o seguinte comando:
java -Xmx200m -jar Middleware.jar
Essa app faz uma série de ações de pesquisa e updates no oracle, pegando umas telas do mainframe.
Cerca de 12 a 15 horas depois de rodando, recebo o seguinte erro:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Já revi o código(não vou colocar aqui pq é mto exenso) e parece que não há nada de errado.
Como posso fazer para saber oq exatamente está acontecendo? Seria algum tipo de profiler ou algo assim? Com qual ferramenta consigo analizar a aplicação e ver oq está consumindo mais memória?
Muito obrigado
Isto irá fazer com que a aplicação não só inicie sabendo que pode usar no máximo 200 Mb de memória, comoq ue também já a inicia com os 200 Mb cacheados para ela.
Definitivamente você precisa de um profiler, embora se sua aplicação acessa o banco de dados, exista 99,99% de chances de ser seu código de acesso ao banco o culpado. Use o NetBeans Profiler ou outra ferramenta similar e acompanhe os gráficos de instâncias criadas x residentes em RAM.
[quote=mister__m][quote=andre_a_s]
Como posso fazer para saber oq exatamente está acontecendo? Seria algum tipo de profiler ou algo assim? Com qual ferramenta consigo analizar a aplicação e ver oq está consumindo mais memória?
[/quote]
Definitivamente você precisa de um profiler, embora se sua aplicação acessa o banco de dados, exista 99,99% de chances de ser seu código de acesso ao banco o culpado. Use o NetBeans Profiler ou outra ferramenta similar e acompanhe os gráficos de instâncias criadas x residentes em RAM.[/quote]
No caso vc diz que provavelmente o gargalo é na parte do banco, o que poderia ser? Conexões não fechadas? Resultsets? Statements?
Obrigado pelas dicas
Esse gargalo é (obviedade) de consumo de memória. Verifique se você não está cacheando muita coisa, recebendo recordsets muito grandes e/ou o tempo todo sem fechar os anteriores…
Grande Mister M
Era isso mesmo, não estava fechando alguns PreparedStaments, Connections e ResultSets.
Muito obrigado, agora está rodando a mais de 50 horas somente com 64mb