2012-04-24 4 views
13

Abbiamo problemi con Tomcat 5.5 che si ferma di notte sui nostri server di produzione (Linux CentOS 4.8) e non abbiamo alcuna idea del perché non si ferma ... Non v'è alcun log di Tomcat a Catalina. fuori o registro di qualsiasi applicazione.Tomcat arrestato senza alcun registro o qualsiasi pila

Abbiamo provato cose diverse per trovare il motivo per cui il server si ferma:

  • configurare Tomcat per essere in grado di generare un core dump
  • strumento System.exit() metodo con javassist per trovare se il metodo è stato chiamato
  • add un gancio di arresto alla JVM (con Runtime.getRuntime().addShutdownHook())

nessuno di loro ha lavorato, non abbiamo core dump, il metodo di uscita e l'arresto del gancio un non chiamato. Le mie conclusioni sono:

  • La VM non è terminata correttamente ma si blocca senza alcun registro.

Qualche idea o registro da leggere per scoprire perché Tomcat si arresta?

+0

Se è possibile replicare questo problema su un altro server, è possibile utilizzare jConsole per monitorare la JVM –

+0

Ho visto Tomcat fermarsi su di me durante l'esecuzione da Eclipse. La fermata non ha manifestato alcun tipo di messaggio o registro, tuttavia penso di averlo ristretto per impilare i problemi di overflow durante i recuperi ricorsivi da parte di Hibernate. – maksimov

+0

Non possiamo replicare il problema, si verifica a volte su server diversi che non stanno facendo nulla di specifico. – Remi

risposta

0

Molto probabilmente c'è un'eccezione di overflow dello stack. Questo è un comportamento tipico di Tomcat quando accade. Ad esempio, si sta tentando di serializzare su bean JSON o XML con dipendenze cicliche (ma senza la gestione dei cicli).

Ogni volta che ho avuto questo problema (più volte) è sempre stato questo. Tutte le altre fermate sono solitamente registrate correttamente (come OutOfMemory ecc.).

Questo tipo di fermate non lascia traccia da nessuna parte.

+0

questa è un'affermazione piuttosto casuale. –

+0

Ogni volta che ho avuto questo problema (più volte) è sempre stato questo. Tutte le altre fermate sono solitamente registrate correttamente (come OutOfMemory ecc.). –

+0

c'è un modo per sapere come eseguire il debug/evidenziare questo in qualche modo @Eugene Retunsky? Come puoi verificare tale reclamo? – mass

0

Tomcat 7 ha un'opzione all'interno di catalina per impedire la chiamata alla classe System.exit o qualcosa di simile: http://ci.apache.org/projects/tomcat/tomcat7/docs/security-manager-howto.html.

Forse c'è un'opzione simile per la versione 5.5. Prova la documentazione.

Ci sono opzioni per reindirizzare l'output alla stessa console che si usa per avviare Tomcat. Questa informazione viene reindirizzata ai registri quando si esegue su sistemi basati su Unix, su Windows, rimane con la console se non reindirizzata.

20

1) Assicurarsi di sapere dove viene reindirizzato lo stderr e controllare se qualcosa è stato stampato lì.

2) Controllare i limiti di memoria su Tomcat e la quantità di memoria disponibile nel sistema. Controlla i log di sistema di Linux in/var/log per vedere se qualcosa di sospetto si è verificato durante il tempo. Ad esempio, il kernel può uccidere a caso un processo (quasi) senza traccia se il sistema sta esaurendo la memoria.

Abbiamo eseguito 5,5 in produzione per anni e non abbiamo mai avuto interruzioni inspiegabili, FWIW.

+11

Bingo./var/log/message ha "Memoria esaurita: uccide 31201 (java) punteggio 783 o sacrifica figlio". – Kof

+0

+1. come suggerito da KOF: '/ var/log/messages' stava mostrando che il processo java è stato ucciso. – ankitjaininfo

+4

Usa il comando 'dmesg' se non hai accesso a'/var/log/messages' –

Problemi correlati