Bom dia!
Tenho uma aplicação console que roda em um servidor incianco o servico com o seguinte comando:
java-Xmx200m-jarMiddleware.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:
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.
ciczan
No Java 6 o OutOfMemoryError dá mais detalhes do que está acontecendo. Dependendo do caso até a linha que causou o estrago.
mister_m
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.
andre_a_s
mister__m:
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?
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.
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
otaviofcs
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…
andre_a_s
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