2012-02-03 13 views
15

Provare a diagnosticare alcuni bizzarri Tomcat (7.0.21) e/o errori JVM su una macchina Linux a 64 bit (CentOS).Tomcat muore improvvisamente

Sto testando la nostra applicazione server e ho provato a centrarlo con 100.000 messaggi. Lanciato jvisualvm e ho tenuto d'occhio il mucchio per tutto il tempo. Tutto sembrava fantastico * (vedi sotto) fino a quando non sono arrivato a circa 93K di messaggi elaborati e Tomcat è appena morto. Ho provato un ps sul numero PID di Tomcat per confermare che era morto.

Fino a questo incidente:

  • Test di carico era in corso da circa 90 minuti; dovrebbe aver terminato poco dopo da quando siamo stati a 93K/100K)
  • CPU teneva forte circa il 45%
  • mucchio usato è stato di circa 2 GB (più o meno un mazzo dopo GC), ma dimensione heap è cresciuto da 4 GB a MAX_HEAP dopo circa 30 minuti
  • Classe di carico/scarico era in bicicletta normalmente
  • discariche della discussione erano normali

in nessuna parte del codice del server sono chiamate a System.exit() - quindi possiamo escludere che a destra fuori (e sì che ho letto -checked !!!).

Non sono sicuro se si tratta di un arresto anomalo di Tomcat o della JVM (come faccio a sapere?). E anche se lo sapevo, io non riesco a trovare alcuna indicazione di cosa è andato storto:

  • Tutti i registri del app server di solo smettere senza alcun messaggio di errore (anche se abbiamo logging universalmente impostato su DEBUG e superiore) file catalina.out e rispetto localhost_access_*
  • di Tomcat solo smettere senza alcun informazioni

ho sentito è possibile avere Tomcat registrare un coredump quando lo fa, ma non è sicuro di come farlo ed esempi on-line aren' sto aiutando molto

Come farebbe SO per diagnosticare questo? Quali misure dovrei prendere per iniziare a escludere tutti i possibili fattori?

Grazie in anticipo!

+13

È il gatto di Schrödinger? – erickson

+0

Hai controllato più registri? http://stackoverflow.com/questions/1575730/debugging-tomcat-crash –

+0

FYI, secondo la mia esperienza, è possibile sapere se Tomcat viene ucciso da OOM Killer mentre la parola "Killed" apparirà da qualche parte vicino alla fine di catalina.out . – Tom

risposta

1

Spiacente, ho dovuto rimuovere il controllo verde da @erickson. Alla fine ho capito cosa stava uccidendo Tomcat.

Sembra che un plug-in del profiler non sia configurato correttamente con VisualVM e il tentativo di eseguire un profilo sul processo Tomcat lo abbia ucciso.

Indagare perché in questo momento e aggiornerà questa risposta una volta che ne so di più.

+2

Vuoi dire, "è anche possibile che' jvisualvm' sta causando l'arresto? ";) – erickson

14

Se la JVM si interrompe, è necessario disporre di un file hs_err_pidNNN.log; non devi fare nulla per abilitare questo. La sua posizione dipende dal tuo sistema operativo e da come stai utilizzando Tomcat. Su Windows, possono essere visualizzati sul desktop, a meno che non si stia eseguendo come servizio. In caso contrario, dovrebbero trovarsi nella directory di lavoro corrente del processo arrestato.

Il sistema operativo probabilmente fornisce strumenti aggiuntivi per il monitoraggio del processo; potresti descrivere di più il tuo ambiente, o forse chiedere allo serverfault.com.

È inoltre possibile che jvisualvm causi effettivamente l'arresto anomalo.

Vorrei provare a riprodurre il problema e semplificare progressivamente lo scenario per aiutare a isolare la causa.

+1

Grazie erickson, dove troverei questo file di registro? Presumo nella mia directory JDK o nei dintorni? – IAmYourFaja

+0

ahhh nm - sembra che sia cwd o/tmp – IAmYourFaja

+0

Dipende dal sistema operativo in uso e da come viene eseguito Tomcat. Su Windows, possono essere visualizzati sul desktop, a meno che non si stia eseguendo come servizio. In caso contrario, dovrebbero trovarsi nella directory di lavoro corrente del processo arrestato. – erickson

6

Un'altra possibilità è che il sistema operativo sta esaurendo la memoria e il OOM Killer sta uccidendo il processo. In questo caso, la JVM non avrebbe avuto l'opportunità di scrivere un dump dell'heap o un file hs_err_pid.

Problemi correlati