Se o processo estiver morrendo, pode ser:
- A JVM foi encerrada devido a uma exceção Java não-distribuída - você deve ver algo em catalina.out ou no arquivo usado para redirecionar o STDOUT e o STDERR - como na falha do aplicativo.
- OS envia um sinal que não foi preso pela JVM - você deve ver algo em STDOUT ou STDERR que são redirecionados normalmente para catalina.out-read como no travamento da JVM.
Encontre onde o STDOUT e o STDERR estão conectados:
sudo -u tomcat6 ls -l /proc/$(pgrep java)/fd/{1,2}
Analise a exceção java. Se você não encontrá-lo, procure por um creash de JVM.
Ativar despejos principais: link
Analise o núcleo: link
gdb /path.../java core
(gdb) bt
Analise a pilha em que a JVM falhou.
EDIT: Para alta carga da JVM, você pode ver qual encadeamento está gerando a carga. Use: top -Hp $(pgrep java)
para descobrir o ID do encadeamento que possui o maior uso de CPU. Em seguida, gere de 2 a 3 segmentos com 10 segundos de intervalo com pkill -3 java
. Converta para hexadecimal o PID do encadeamento a partir da saída superior e, em seguida, procure esse número após nid=
em catalina.out. Esse é o rastreamento de pilha do thread mais expansivo.
Verifique também se a JVM não está fazendo muitos GCs completos, porque a memória não está configurada corretamente. Consulte: link , , link