Estou usando o kill -3
comando para ver o despejo de thread da JVM no Unix. Mas onde posso encontrar a saída desse kill
comando? Eu estou perdido!!
java
multithreading
dump
javanerd
fonte
fonte
Respostas:
Você também pode usar jstack (incluído com o JDK) para fazer um despejo de thread e gravar a saída onde quiser. Isso não está disponível em um ambiente unix?
fonte
O despejo de thread é gravado no sistema fora da VM na qual você executou o
kill -3
. Se você estiver redirecionando a saída do console da JVM para um arquivo, o dump do encadeamento estará nesse arquivo. Se a JVM estiver sendo executada em um console aberto, o dump do encadeamento será exibido em seu console.fonte
Há uma maneira de redirecionar a saída de despejo de thread da JVM no sinal de interrupção para separar o arquivo com a opção de diagnóstico LogVMOutput :
fonte
Com o Java 8 em cena,
jcmd
é a abordagem preferida.A seguir está o snippet da documentação da Oracle :
O lançamento do JDK 8 introduziu o Java Mission Control, o Java Flight Recorder e o utilitário jcmd para diagnosticar problemas com aplicativos JVM e Java. É sugerido usar o utilitário mais recente, jcmd em vez do utilitário jstack anterior para diagnósticos aprimorados e sobrecarga de desempenho reduzida.
No entanto, enviar isso com o aplicativo pode ser implicações de licenciamento que eu não tenho certeza.
fonte
jcmd
não se conecta ao processo de serviço Windows comcom.sun.tools.attach.AttachNotSupportedException: Insufficient memory or insufficient privileges to attach
enquantojstack -F
sucede: stackoverflow.com/questions/1197912/...No mesmo local onde o stdout da JVM está colocado. Se você tiver um servidor Tomcat, este será o
catalina_(date).out
arquivo.fonte
Ao usar kill -3, deve-se ver o despejo do thread na saída padrão. A maioria dos servidores de aplicativos grava a saída padrão em um arquivo separado. Você deve encontrá-lo lá ao usar kill -3. Existem várias maneiras de obter despejos de thread:
kill -3 <PID>
: Dá saída para saída padrão.Para VMs de hotspot, também podemos usar o
jstack
comando para gerar um despejo de thread. Faz parte do JDK. A sintaxe é a seguinte:fonte
kill -3 <PID>
, não deve matar o JVM. Que tipo de aplicativo Java você está procurando?No Jboss você pode realizar o seguinte
Isso redirecionará sua saída / threadump para o console de arquivo especificado no comando acima.
fonte
fonte
Etapas que você deve seguir se quiser o despejo de thread de seu processo Java autônomo
Etapa 1: obtenha o ID do processo para o script de shell que chama o programa java
Etapa 2: Obtenha a ID do processo para o filho que foi invocado pelo runABCD. Use o PID acima para obter os filhos.
Etapa 3: obtenha o JSTACK para o processo específico. Obtenha a identificação do processo do seu processo XYSServer. ie 8536
fonte