Pergunta

Eu consegui obter uma memória 'vazamento' em um aplicativo java que estou desenvolvendo. Ao executar o meu conjunto de testes JUnit eu aleatoriamente obter fora de exceções de memória (java.lang.OutOfMemoryError).

Que ferramentas posso usar para examinar a pilha de minha aplicação java para ver o que está usando toda a minha pilha para que eu possa trabalhar para fora o que está mantendo referências a objetos que deve ser capaz de ser lixo coletado.

Foi útil?

Solução

VisualVM está incluído na maioria dos lançamentos recentes de Java. Você pode usar isso para criar um despejo de pilha, e olhar para os objetos nela.

Como alternativa, você também pode criar um commandine heapdump usando jmap (em sua jdk / dir bin):

jmap -dump:format=b,file=heap.bin <pid>

Você ainda pode usar isso para obter um histograma rápida de todos os objetos

jmap -histo <pid>

Posso recomendar Eclipse Memória Analyzer ( http://eclipse.org/mat ) para análise avançada de pilha lixões. Ele permite que você descobrir exatamente por que um determinado objeto ou conjunto de objetos está vivo. Aqui está uma entrada de blog mostrando o que de Memória Analyzer pode fazer: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with- one-click /

Outras dicas

Se você precisa de algo livre, tente VisualVM

Pela descrição do projeto:

VisualVM é uma ferramenta visual integração de ferramentas de linha de comando do JDK e capacidades de perfis leves. Projetado tanto para desenvolvimento e produção o uso do tempo.

Esta é uma pergunta muito velho. Um monte de pessoas pode ter começado usando IntelliJ desde que foi originalmente respondeu. IntelliJ tem um plugin que pode mostrar o uso de memória chamado JVM Debugger memória Ver .

Use um profiler como JProfiler ou YourKitProfiler

JProfiler funcionou muito bem para mim ....

http://www.ej-technologies.com/products/jprofiler /overview.html

Use a Eclipse Memória Analyzer

Não há nenhuma outra ferramenta que eu estou ciente de qualquer ferramenta que chega perto de sua funcionalidade e desempenho e preço (livre e de código aberto) ao analisar pilha despejos.

Se você estiver usando um sistema que suporta GTK você pode tentar usar JMP .

Você pode tentar o detector de vazamento de memória que faz parte do JRockit Mission Control Suite ferramentas. Ele permite que você para inspecionar a pilha enquanto o JVM está em execução. Você não precisa para tirar fotos o tempo todo. Você pode apenas se conectar on-line para o JVM e depois ver como a pilha muda entre coletas de lixo. Você também pode inspecionar objetos, siga referências graficamente e obter rastreamentos de pilha de onde o aplicativo está alocando objetos. Aqui está uma breve introdução .

A ferramenta é livre para usar para o desenvolvimento e você pode baixá-lo aqui .

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