Pergunta

Alguém tem usado gerenciador de memória Eclipse para detectar vazamento de memória em códigos java? Alguém pode recomendar um bom lugar para procurar informações sobre usando o gerenciador de memória? Eu li algo on-line, ele sugere que eu preciso para deixar o programa funcionando até que ele trava (erro de falta de memória ocorre), que gera um relatório de acidente. Em seguida, use o Gerenciador de memória para abrir este relatório para examinar onde pode ocorrer o vazamento de memória. É assim que todo mundo usa o gestor de memória?

Foi útil?

Solução

-XX: + HeapDumpOnOutOfMemoryError pode ser útil, meu fluxo de trabalho atual para usar o Gerenciador de Eclipse memória é:

  1. Execute o programa normalmente
  2. Aguarde memória para sair da mão.
  3. jmap : jmap -dump:format=b,file=dump.hprof <PID>
  4. Abra o arquivo hprof em EMM.

Eu costumo começar a trabalhar com os pontos de vista do histograma e árvores dominador para ver se algo parece fora de sintonia, então perfurar para baixo de lá.

VisualVM pode ser útil, mas parece muito menos eficiente do que EMM quando se trabalha com um despejo de pilha (EMM armazena um monte de informações sobre como carregar o despejo de pilha). Netbeans Profiler é bom para obter os locais de atribuições e para profiling tempo.

Outras dicas

Talvez a coisa mais simples é executar o seu programa sob hprof (vem como padrão com a JVM) durante algum tempo, e forçar uma saída. A saída do hprof deve esperançosamente lhe dar algumas indicações imediatas re. o vazamento de memória.

Ao contrário do depurador de memória Eclipse (que eu só estou bem informados sobre a partir do que você escreve), você pode reunir estatísticas a partir de qualquer ponto na execução.

sugere que eu preciso para deixar o programa funcionando até que ele trava (erro de falta de memória ocorre), que gera um relatório de acidente.

Eu não acho que isso é verdade - você não vai obter um arquivo de despejo quando um OutOfMemoryError ocorre (eu apostaria o autor está confundindo este problema com algum tipo de JVM bug que poderia causar um dump de memória para ser salvo) .

O melhor procedimento é tomar um despejo de pilha usando jmap ; A saída será o conteúdo da pilha para um arquivo binário (geralmente conhecidos como arquivo hprof). Este arquivo pode então ser analisada por qualquer número de analisadores:

  • jhat - ferramenta Sun que analisa arquivo hprof, inicia-se um servidor web embutido para que possa analisar a pilha através de um web relatórios navegador / vista. Descobri que este é muito lento para grandes montões.
  • VisualVM - impressionante depuração / ferramenta junto com o JDK solução de problemas. Entre outras coisas, isso também pode ser usado para gerar um despejo de pilha de qualquer processo em execução, bem como um depósito de rosca. Descobri que é muito lento para carregar grandes arquivos HPROF bem embora.
  • Analyzer memória Eclipse - Eclipse plugin que pode gerar arquivos HPROF.

Eu recomendo usando o plugin Eclipse, pois é muito rápido para carregar grande (500MB>) pilha de despejos (em menos de um minuto), produz relatórios úteis, suporta uma linguagem de consulta com lógica complexa, etc.

Esta página explica trabalhar com heap JVM lixeiras. Jhat é uma maneira mais simples, se menos gráfico de trabalhar com montes, mas você também pode carregar os mesmos arquivos de despejo para o gerenciador de memória eclipse. Você também pode obter algumas informações de jvisualvm, se você estiver usando uma corrente (1,6) JVM.

Eu geralmente preferem perfil de aplicativos usando o NetBeans Profiler. Você pode facilmente ver quais objetos estão vazando e onde eles são criados na maioria dos casos. Há provavelmente várias outras ferramentas que vão fazer isso também, mas eu sei que os NetBeans Profiler funciona bem, e é fácil de usar.

Você pode tentar usar JProbe . Você pode monitorar sua aplicação e pode olhar para os objetos como eles são criados. Também Isso ajudará analisar quais objetos não faça lixo get coleta e será ponteiros para seguir em frente.

Embora não seja livre, mas lembro que ele vem com uma licença de avaliação, de modo a verificar para isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top