我有一个Tomcat 7在Linux中运行的操作系统,可以$CATALINA_HOME/bin/startup.sh通过$CATALINA_HOME/bin/shutdown.sh 来启动和关闭/etc/init.d
Tomcat 7
$CATALINA_HOME/bin/startup.sh
$CATALINA_HOME/bin/shutdown.sh
/etc/init.d
除了1个问题,其他都还可以。有时tomcat不会停止。 尽管我停止了它,并且在catalina.out日志中看到了正在下降的日志,但是如果我这样做,ps -ef仍然可以看到该进程正在运行。
ps -ef
可能是什么问题呢?我该如何调试?我的感觉是,这与线程有关。
因此,以下是可疑部分: 1)我使用Log4j的LogManager来检测log4j配置是否已更改,但是我Log4jManager.shutdown 在contextDestroyed ServletContextListener 2)上使用H2数据库,然后在关机时看到:
Log4jManager.shutdown
contextDestroyed
ServletContextListener
H2
严重:Web应用程序[/ MyApplication]似乎已启动 名为[H2 Log Writer MYAPPLICATION] 的线程,但未能停止该线程。 这很可能造成内存泄漏 严重:Web应用程序[/ MyApplication]似乎已启动 名为[H2 File Lock Watchdog /opt/myOrg/tomcat/webapps/MyApplication/db/myDatabase.lock.db] 的线程,但 未能停止。这很可能造成内存泄漏。 2012年4月2 日,上午9:08:08 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重:Web应用程序[/ MyApplication] 似乎已启动名为[FileWatchdog]的线程,但未能 将其停止。这很可能造成内存泄漏。
严重:Web应用程序[/ MyApplication]似乎已启动 名为[H2 Log Writer MYAPPLICATION] 的线程,但未能停止该线程。 这很可能造成内存泄漏
严重:Web应用程序[/ MyApplication]似乎已启动 名为[H2 File Lock Watchdog /opt/myOrg/tomcat/webapps/MyApplication/db/myDatabase.lock.db] 的线程,但 未能停止。这很可能造成内存泄漏。 2012年4月2 日,上午9:08:08 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads严重:Web应用程序[/ MyApplication] 似乎已启动名为[FileWatchdog]的线程,但未能 将其停止。这很可能造成内存泄漏。
有什么帮助吗?我如何在这里发现问题?
更新: 我kill -3按照@daveb的建议进行了操作,在catalina.out中,我看到了:
kill -3
JVMDUMP006I正在处理转储事件“用户”,详细信息“”-请稍候。JVMDUMP032I JVM使用’/etc/init.d/javacore.20120402.093922.2568.0001.txt’请求Java转储,以响应事件JVMDUMP010I Java转储写入/etc/init.d/javacore.20120402.093922.2568.0001.txt JVMDUMP013I处理的转储事件“用户”,详细信息“”。
有一个javacore,/etc/init.d但我不知道如何处理它。即我应该调查哪些部分
如果Web应用程序已停止,则所有与数据库的连接也应关闭。如果没有连接列表,请执行SQL语句“ shutdown”(仅适用于H2和HSQLDB数据库)。
如果您已注册Servlet,则可以在Servlet.destroy()方法中执行此操作。
Servlet.destroy()
如果已经注册了ServletContextListener,则可以在该ServletContextListener.contextDestroyed(ServletContextEvent servletContextEvent)方法中执行“关闭”语句。这就是org.h2.server.web.DbStarter ServletContextListener功能(H2数据库中包含的功能)。
ServletContextListener.contextDestroyed(ServletContextEvent servletContextEvent)
org.h2.server.web.DbStarter