Ho un Tomcat 7
in esecuzione in Linux che mi metto via $CATALINA_HOME/bin/startup.sh
e lo spegnimento tramite $CATALINA_HOME/bin/shutdown.sh
da /etc/init.d
Tomcat non si ferma. Come posso eseguire il debug di questo?
Tutto è ok tranne 1 problema. A volte Tomcat non si ferma.
Anche se lo interrompe e vedo nei cataloghi catalina.out che stanno andando giù, se faccio ps -ef
posso ancora vedere il processo in esecuzione.
Quale potrebbe essere il problema? Come posso eseguire il debug di questo? La mia sensazione è che questo è legato ai thread.
Così le parti che sono sospette sono i seguenti:
1) Io uso LogManager di Log4j per rilevare se la configurazione log4j è stato modificato, ma lo faccio Log4jManager.shutdown
su un contextDestroyed
ServletContextListener
2) Io uso H2
database e io vedi allo spegnimento:
GRAVI: L'applicazione web [/ MyApplication] sembra aver iniziato una discussione
nome [H2 Log Writer MyApplication], ma non è riuscito a fermarlo.
questo è molto probabile che creare una perdita di memoriaGRAVI: L'applicazione web [/ MyApplication] sembra aver iniziato una
filo di nome [File H2 Blocco Watchdog
/opt/myOrg/tomcat/webapps/MyApplication /db/myDatabase.lock.db] ma ha
non è riuscito a fermarlo. È molto probabile che questo crei una perdita di memoria. 2-apr-
2012 09:08:08 org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads GRAVI: L'applicazione web [/ MyApplication]
sembra aver iniziato una discussione chiamato [FileWatchdog] ma non è riuscito
per fermarlo. È molto probabile che questo crei una perdita di memoria.
Qualsiasi aiuto per favore? Come posso rilevare il problema qui?
UPDATE:
ho fatto un kill -3
come suggerito da @daveb, e nel catalina.out vedo:
JVMDUMP006I Processing discarica evento "utente", particolare "" - attenda prego. JVMDUMP032I JVM richiesto Java discarica utilizzando '/etc/init.d/javacore.20120402.093922.2568.0001.txt' in risposta a un evento JVMDUMP010I Java discarica scritto /etc/init.d/javacore.20120402.093922.2568.0001.txt JVMDUMP013I Evento di dumping elaborato "utente", dettaglio "".
C'è un javacore in /etc/init.d
ma non so come elaborarlo. Cioèquali parti dovrei indagare
Provare a contrassegnare i thread come thread daemon in modo che la VM non aspetti la loro morte. http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#setDaemon(boolean) Ma ovviamente è utile solo per i propri thread, non per quelli avviati solo da H2 – luukes
H2 crea i thread demone. –
@ThomasMueller: Allora, sembra che il 'SEVERE: L'applicazione web [/ MYAPPLICATION] abbia avviato un thread chiamato [H2 File Lock Watchdog /opt/myOrg/tomcat/webapps/MyApplication/lock.db] ma non è riuscito a fermarsi esso. Questo è molto probabile che crei una perdita di memoria. Media in catalina.out? Non l'ho creato, ma 'H2'. – Jim