我有一个Tomcat 7
在Linux上运行,我通过$CATALINA_HOME/bin/shutdown.sh
通过$CATALINA_HOME/bin/startup.sh
和关机开始从/etc/init.d
Tomcat不停止。我怎样才能调试呢?
一切正常,除了1点的问题。有时tomcat不会停止。
虽然我停下来,我看到在catalina.out日志中正在下降,如果我ps -ef
我仍然可以看到进程运行。
可能是什么问题?我怎样才能调试呢?我的感觉是,这与线程有关。
让可疑的部分如下:
1)我用Log4j的日志管理,以检测是否log4j的配置已经改变,但我Log4jManager.shutdown
上一个contextDestroyed
ServletContextListener
2)我用H2
数据库和我看到关机:
重度:Web应用程序[/为MyApplication]似乎已经启动名为[H2日志写入所有MyApplication]一个
线程,但未能阻止它。
这很可能造成泄漏严重记忆:Web应用程序[/为MyApplication]似乎已经开始了
线程名为[H2文件锁定看门狗
的/ opt/MYORG/tomcat的/ webapps /下所有MyApplication /db/myDatabase.lock.db]但有
无法停止它。这很可能造成内存泄漏。 4月2日,
2012上午09时08分08秒org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads重度:Web应用程序[/为MyApplication]
似乎已经开始了一个名为[FileWatchdog]线程,但未能
停止它。这很可能造成内存泄漏。
请帮忙吗?我如何在这里检测到问题?
UPDATE:
我做了kill -3
通过@daveb的建议,并在catalina.out的我看到:
JVMDUMP006I处理倾倒事件 “用户”,细节 “” - 请稍候。 JVMDUMP032I JVM使用要求 “/etc/init.d/javacore.20120402.093922.2568.0001.txt” Java转储响应写入 /etc/init.d/javacore.20120402.093922.2568.0001.txt的 事件JVMDUMP010I Java转储JVMDUMP013I 已处理的转储事件“user”,详细信息“”。
/etc/init.d
有一个javacore,但我不知道如何处理它。即我应该调查哪些部分
尝试将您的线程标记为守护线程,以便虚拟机不会等待它们死亡。 http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#setDaemon(boolean)但是,当然这只对你自己的线程有用,而不是H2 – luukes 2012-04-02 06:53:53
H2开始的创建守护线程。 – 2012-04-02 09:54:19
@ThomasMueller:那么'SEVERE:Web应用程序[/ MYAPPLICATION]看起来是否启动了一个名为[H2 File Lock Watchdog /opt/myOrg/tomcat/webapps/MyApplication/lock.db]的线程,但未能停止它。这很可能会造成内存泄漏.'意味着在catalina.out?我没有创建这个,但是'H2'。 – Jim 2012-04-02 11:09:54