Pergunta

Eu percebo que questões semelhantes foram questionados sobre isso antes aqui no SO, mas deixe-me descrever exatamente o que eu preciso fazer:

Eu tenho um conjunto de testes que executam uma aplicação java linha de comando e eu gostaria de adicionar perfil de memória para eles. Uma opção que vejo seria adicionar código (possivelmente usando 3rd party ferramentas / bibliotecas) para meu aplicativo que iria fornecer um instantâneo de memória. Outra opção seria a utilização de uma ferramenta de terceiros que administra instrumentos / minha candidatura ea JVM para mim (e, idealmente, não exige que eu alterar meu código). Estou pensando em algo como Valgrind mas para Java. Também open source, se possível.

O que eu realmente gostaria de fazer é configurar os testes de memória para que o meu uso de memória está sendo monitorada em intervalos regulares, digamos que a cada segundo, e jogado em um arquivo de texto. Dessa forma, eu seria capaz de ver se o uso da memória oscila / aumenta / diminui ao longo do tempo. Eu também vou ser capaz de calcular os picos máximo e mínimo.

Tem alguém aqui fez algo assim?

Agradecemos antecipadamente.

Foi útil?

Solução

Com algo como JProfiler tudo o que você precisa fazer é adicionar alguns parâmetros para a JVM. Ele usa JVMTI.

Eu acho que você deve estar lendo sobre profilers e exatamente o que eles podem fazer por você. Sugiro também ler-se sobre JVMTI.

O JVMTM Interface Tool (JVM TI) é uma nova interface de programação nativa para uso por ferramentas. Ele fornece uma maneira de inspecionar o estado e para controlar a execução de aplicativos em execução na máquina virtual Java (JVM). JVM TI suporta toda a gama de ferramentas que necessitem de acesso a estado JVM, incluindo, mas não limitados a:. Profiling, depuração, monitoramento, análise de segmento, e ferramentas de análise de cobertura

Nota: JVM TI substitui o Java Virtual Machine Profiler Interface (JVMPI) e do Java Virtual Machine Debug Interface (JVMDI). JVMPI e JVMDI serão removidos na próxima versão do J2SETM.

Outras dicas

YourKit também tem um bom profiler muito

Você verificou

VisualVM e Eclipse-Callisto ?

Um bom lugar para começar é para ver se seus suportes JVM "java -Xrunhprof", pois isso pode gerar pilha informações de perfil, sem fazer o seu cenário mais complexo.

http://docs.oracle.com/ JavaSE / 7 / docs / technotes / samples / hprof.html

Você pode achar que o suficiente para você para começar.

Vários do profiler como YourKit tem API do para rastrear as alocações de memória. Outra opção aqui estão monitorando ferramentas como jxinsight ou Glassbox ou jamon

Para analisar pilha despeja a Eclipse Memória Analyzer é a melhor ferramenta que você pode obter. É livre e open source, assim você pode automatizar a análise de heap dumps tanto quanto você quiser.

Eu desenvolver no Eclipse, mas eu tenho Netbeans em torno de usar sua excelente Profiler. Ele é limitado em comparação com alguns dos mais comerciais, mas ainda suficientemente bom para manchar a maioria dos gargalos

Você pode usar jrcmd que é um utilitário de linha de comando que vem com o JRockit JVM. Se você souber o PID do processo Java você pode apenas fazer:

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

e ele vai te dar:

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k java/lang/String
 6.1% 612k     5604     +0k java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k java/util/HashMap$Entry
 ...

Além das respostas acima Eu também gostava de usar profiler um par de anos atrás. Não sei se isso ajuda.

Eu recomendo dynaTrace edição produção. excelente ferramenta para aplicação de memória perfil. Baixa sobrecarga e 100% das operações realizadas.

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