Foi-me dito que posso adicionar o -XX:+HeapDumpOnOutOfMemoryError
parâmetro às minhas opções de inicialização da JVM no script de inicialização do JBoss para obter um dump de heap quando recebermos um erro de falta de memória em nosso aplicativo. Eu queria saber onde esses dados são despejados? É apenas para o console ou para algum arquivo de log? Se for apenas para o console, e se eu não estiver conectado ao servidor Unix através do console?
java
jboss
memory-leaks
heap
Dmitry Trunov
fonte
fonte
Respostas:
Aqui está o que a documentação da Oracle tem a dizer:
fonte
HeapDumpPath
, você verá algo semelhante ao"Unable to create /tmp/java_pidpid.hprof: File exists"
da saída padrão. Certifique-se de mover seu arquivo de despejo para fora do caminho de despejo para abrir caminho para qualquer arquivo de despejo futuro; e use o<pid>
espaço reservado no nome do arquivo para aumentar a entropia no nome do arquivo.Você pode visualizar este despejo no console UNIX.
O caminho para o dump de heap será fornecido como uma variável logo após o local em que você colocou a variável mencionada.
Por exemplo:
Você pode visualizar o despejo no console no caminho mencionado.
fonte
Achei difícil decifrar o que se entende por "diretório de trabalho da VM". No meu exemplo, eu estava usando o programa Java Service Wrapper para executar um jar - os arquivos de despejo foram criados no diretório em que eu havia colocado o programa wrapper, por exemplo, c: \ myapp \ bin. A razão pela qual descobri isso é porque os arquivos podem ser muito grandes e eles encheram o disco rígido antes que eu descobrisse sua localização.
fonte
Se você não estiver usando a opção "-XX: HeapDumpPath", no caso do JBoss EAP / As, por padrão, o arquivo de despejo de pilha será gerado no diretório "JBOSS_HOME / bin".
fonte