Pergunta

Nós temos uma aplicação de servidor de longa duração em execução Java 5, e profiling que podemos ver a velha geração crescendo lentamente ao longo do tempo. É corretamente liberado em um GC completo, mas eu gostaria de ser capaz de olhar para os objetos inacessíveis em Eclipse MAT usando um despejo de pilha. Eu tenho obtido sucesso um despejo de pilha usando + XX: HeapDumpOnCtrlBreak, mas a JVM sempre faz um GC antes de despejar o heap. Aparentemente, isso não acontece em Java 6, mas estamos presos em 5 por agora. Existe alguma maneira para evitar isso?

Foi útil?

Solução

Sugiro um profiler 3-parte, como YourKit , o que pode permitir-lhe tirar instantâneos sem dando início à primeira GC. bônus adicional, você pode tirar uma foto sem as travessuras toda ctrl-break.

Outras dicas

jconsole uso ou VisualVM ou jmc ou ... outro console de gerenciamento JMX. abrir HotSpotDiagnostic em com.sun.management. selecionar o método dumpheap e entrada dois parâmetros:

  • caminho para o arquivo de despejo
  • (true / false) despejar apenas objetos vivos. uso false para despejar todos os objetos.

Note que o arquivo de despejo será escrito pela JVM você conectado, não por jvisualvm, por isso, se o JVM está sendo executado em um sistema diferente, ele será gravado no sistema.

 enter descrição da imagem aqui

Você já tentou a ferramenta jmap padrão fornecido com o JDK? O número de jmap foi introduzida oficialmente em Java 5.

linha de comando Exemplo: / Java / bin / jmap -heap: format = b

O resultado pode ser processado com a ferramenta jhat padrão ou com aplicações gráficas tais como MAT.

Eu tenho algum código aqui que pode programaticamente tomar um despejo de pilha sobre JMX:

Link: JmxHeapDumper.java

Os comentários no código-fonte conter 2 links para artigos que continham informações úteis sobre como tirar pilha despejos. Eu não sei ao certo, mas se você está com sorte, talvez a abordagem JMX teria alguma maneira de evitar a GC. Espero que isso ajude!

JProfiler ( EJ-tecnologias ) pode fazer isso.

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