У меня есть Tomcat 7
, работающий в Linux, который я запускаю через $CATALINA_HOME/bin/startup.sh
и завершаю работу через $CATALINA_HOME/ bin/shutdown.sh
from /etc/init.d
Все в порядке, кроме одной проблемы. Иногда кот не останавливается.
Хотя я останавливаю его и вижу в журналах catalina.out, что происходит сбой, если я делаю ps -ef
, я все равно вижу, что процесс выполняется.
В чем может быть проблема? Как я могу отладить это? Я чувствую, что это связано с потоками.
Итак, части, вызывающие подозрение, следующие:
1) Я использую LogManager Log4j, чтобы определить, была ли изменена конфигурация log4j, но я делаю Log4jManager.shutdown
для contextDestroyed
ServletContextListener
2) я использую H2
базы данных, и я вижу при завершении работы:
СЕРЬЕЗНЫЙ: Веб-приложение [/MyApplication], похоже, запустило
поток с именем [H2 Log Writer MYAPPLICATION], но не смог его остановить.
Очень вероятно, что это приведет к утечке памяти.СЕРЬЕЗНЫЙ: веб-приложение [/MyApplication], похоже, запустило
поток с именем [H2 File Lock Watchdog
/opt/myOrg/tomcat/webapps/MyApplication/db/myDatabase.lock.db], но имеет
не удалось это остановить. Это очень вероятно, чтобы создать утечку памяти. 2 апр
2012 9:08:08 org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads СЕРЬЕЗНЫЙ: веб-приложение [/MyApplication]
кажется, запустил поток с именем [FileWatchdog], но не удалось
остановить это. Это очень вероятно, чтобы создать утечку памяти.
Помогите пожалуйста? Как я могу обнаружить проблему здесь?
ОБНОВЛЕНИЕ:
Я сделал kill -3
, как предложил @daveb, и в файле catalina.out я вижу:
JVMDUMP006I Обработка события дампа "пользователь", деталь "" - пожалуйста, подождите. JVMDUMP032I JVM запросила дамп Java, используя '/etc/init.d/javacore.20120402.093922.2568.0001.txt' в ответ на событие JVMDUMP010I Дамп Java, записанный в /etc/init.d/javacore.20120402.093922.2568.0001.txt JVMDUMP013I Обработано событие дампа "пользователь", деталь "".
В /etc/init.d
есть javacore, но я не знаю, как его обработать. т.е. какие части я должен исследовать