我有一個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