Tempo de geração
Quando um programa Java está em execução, às vezes são gerados arquivos JavaCore e HeapDump. Isso geralmente ocorre quando o programa Java encontra um problema fatal.
Às vezes, após a ocorrência de um problema fatal, o aplicativo Java não morre e pode continuar em execução;
Mas às vezes ocorrem problemas fatais e o processo Java morre;
Para manter o estado de execução do aplicativo Java antes que ocorra um erro fatal, a JVM gera dois arquivos antes de morrer, ou seja, arquivos JavaCore e HeapDump.
Qual é a diferença
JavaCore trata de CPU, enquanto os arquivos HeapDump tratam de memória.
O arquivo JavaCore salva principalmente a posição de execução de cada thread da aplicação Java em um determinado momento, ou seja, qual classe, qual método e qual linha a JVM executa. É um arquivo de texto. Após abri-lo, você pode ver a pilha de execução de cada thread e exibi-la como rastreamento de pilha. Ao analisar o arquivo JavaCore, podemos descobrir se a aplicação está "travada" em determinado ponto, ou seja, demora muito para ser executada em determinado ponto, como uma consulta ao banco de dados que não recebe resposta por um longo tempo tempo, eventualmente levando a uma falha do sistema.
O arquivo HeapDump é um arquivo binário que salva o uso de objetos no heap JVM em um determinado momento. Esse tipo de arquivo requer ferramentas correspondentes para análise, como ferramentas como o IBM Heap Analyzer. A função mais importante deste tipo de arquivo é analisar se há estouro de memória no sistema.
Como gerar
Esses dois arquivos podem ser gerados manualmente. Quando encontramos uma situação em que o sistema fica lento ou não responde, podemos gerar os arquivos JavaCore e HeapDump manualmente.
No Unix/Linux, o método para gerar esses dois arquivos é o seguinte:
# ps -ef |
usuário 4616 4582 0 17:30 pts/0 00:00:00 grep java
root 5580 1 0 27 de outubro? 00:02:27 /usr/bin/java -server -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava. util.logging.config.file=/usr/local/tomcat8090/conf/logging.properties -Djava.endorsed.dirs=/usr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat8090 -Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start
# matar -3 5580
Como analisar
Arquivo JavaCore
Os dois conjuntos de arquivos são particularmente eficazes na análise do JavaCore, pois podem ver a posição de execução do thread em dois momentos. Se for descoberto que o mesmo thread é executado na mesma posição nos dois conjuntos de dados, ele. significa que pode haver um problema aqui, porque o programa é executado extremamente rápido. Se chegar a um determinado ponto duas vezes, significa que esse ponto consome muito tempo. Ao analisar esses dois arquivos, podemos descobrir a causa e resolvê-lo. o problema.
Há uma marca "Detalhes do thread atual" no cabeçalho do arquivo JavaCore, que registra o ID do thread do sistema em execução quando o JavaCore é gerado. Use o ID do thread para encontrar as informações detalhadas do thread no arquivo. qual classe o thread está executando e causa o JavaCore.
NULO ------------------------------------------------- - -----------------------
Rotina de despejo do subcomponente 0SECTION TITLE
NULO ===============================
1TISIGINFOOUTOFMEMORY recebido
1TIDATETIME Data: 07/12/2011 às 15:59:42
1TIFILENAME Nome do arquivo Javacore:/usr/WebSphere/AppServer/profiles/WCSProdNode2/javacore19202086.1323298782.txt
NULO ------------------------------------------------- - -----------------------
0SECTION Rotina de despejo do subcomponente XHPI
NULO =============================
1XHTIME Quarta, 7 de dezembro 15:59:42 2011
1XHSIGRECV Sinal inesperado -1 recebido em 0x0 em <desconhecido> Processamento encerrado.
1XHFULLVERSION J2RE 1.4.2 IBM AIX compilação ca142ifx-20090918 (SR13 FP2)
NULO
1XHCURRENTTHD Detalhes do tópico atual
NULO ---------------------------
2XHCURRSYSTHD "WebContainer: 5" sys_thread_t:0x45FB5328
Pilha nativa 3XHNATIVESTACK
NULO------------
3XHSTACKLINEERR indisponível – endereço de pilha inválido
:::
:::
Rotina de dump do subcomponente 0SECTION XM
NULO ===========================
NULO
1XMCURTHDINFO Detalhes do tópico atual
NULO ---------------------------
3XMTHREADINFO "WebContainer: 5" (TID:0x70A8E260, sys_thread_t:0x45FB5328, estado:R, ID nativo:0x5CC0) prio=5
4XESTACKTRACE em org.apache.taglibs.standard.tag.common.core.ImportSupport$ImportResponseWrapper.getString (fonte desconhecida)
4XESTACKTRACE em org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString (fonte desconhecida)
4XESTACKTRACE em org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag (fonte desconhecida)
4XESTACKTRACE em com.ibm._jsp._part._jspx_meth_c_import_3(_part.java(Código Compilado))
4XESTACKTRACE em com.ibm._jsp._part._jspx_meth_c_otherwise_3(_part.java(Código Compilado))
4XESTACKTRACE em com.ibm._jsp._part._jspx_meth_c_choose_4(_part.java(Código Compilado))
4XESTACKTRACE em com.ibm._jsp._part._jspService(_part.java:3237)
Arquivo HeapDump
O arquivo HeapDump é um instantâneo da pilha Java em um horário especificado e é um tipo de arquivo de imagem. A ferramenta Heap Analyzer analisa o arquivo HeapDump para descobrir quais objetos ocupam muito espaço de pilha para localizar objetos que causam vazamentos de memória ou podem causar vazamentos de memória.