Tomcat 7中的Web应用程序在12-18小时后停止响应

6
我有一个使用Tomcat托管的应用程序,12-18小时后它停止响应,我可以访问其他应用程序,如Tomcat管理器,即Tomcat进程正在工作,但我的部署的应用程序停止响应。
我在日志中没有找到任何真正重要的东西,可以直接得到一些原因。
我使用Struts2 + Spring + Hibernate + Jasper + jQuery。我的Tomcat是7.0.32,托管了MySQL数据库。
请告诉我 - 如何知道确切的原因,即如何进行调试,以及稍后如何修复它。
如果需要,我可以添加一些日志,但不确定添加哪些日志,因此请求管理员不要将此问题标记为虚假或无法回答的问题,而是评论并我将根据需要添加/更新问题。
我已经阅读了一些相关的问题,但它们与我的问题真的不同。
提前致谢。
catilina.out是在我停止服务器后创建的,简要显示以下内容。
INFO: Waiting for 200 instance(s) to be deallocated
        Jul 28, 2013 8:27:15 PM org.apache.catalina.core.StandardWrapper unload
        INFO: Waiting for 200 instance(s) to be deallocated
        Jul 28, 2013 8:27:15 PM org.apache.catalina.core.StandardWrapper unload
        INFO: Waiting for 1 instance(s) to be deallocated
        Jul 28, 2013 8:27:16 PM org.apache.catalina.core.StandardWrapper unload
        INFO: Waiting for 1 instance(s) to be deallocated
        Jul 28, 2013 8:27:17 PM org.apache.catalina.core.StandardWrapper unload
        INFO: Waiting for 1 instance(s) to be deallocated
        Jul 28, 2013 8:27:17 PM org.apache.catalina.core.ApplicationContext log
        INFO: Closing Spring root WebApplicationContext
        Jul 28, 2013 8:27:17 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
        SEVERE: The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
        Jul 28, 2013 8:27:17 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
        SEVERE: The web application [] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
        Jul 28, 2013 8:27:17 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
        SEVERE: The web application [] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.
        Jul 28, 2013 8:27:17 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
        SEVERE: The web application [] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] but has failed to stop it. This is very likely to create a memory leak.
.............



SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@55cd6225]) and a value of type [org.springframework.aop.framework.Cglib2AopProxy.CglibMethodInvocation] (value [ReflectiveMethodInvocation: public java.util.List com.cursive.eclinic.processor.DoctorProcessor.list(com.cursive.eclinic.DoctorCriteria) throws java.lang.Exception; target is of class [com.cursive.eclinic.processor.DoctorProcessor]]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@1ee69725]) and a value of type [com.opensymphony.xwork2.ActionContext] (value [com.opensymphony.xwork2.ActionContext@56a2f846]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@2513679]) and a value of type [org.apache.struts2.dispatcher.Dispatcher] (value [org.apache.struts2.dispatcher.Dispatcher@21cf431f]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@55cd6225]) and a value of type [org.springframework.aop.framework.Cglib2AopProxy.CglibMethodInvocation] (value [ReflectiveMethodInvocation: public java.util.List com.cursive.eclinic.processor.TimeSlotProcessor.list(com.cursive.eclinic.TimeSlotCriteria) throws java.lang.Exception; target is of class [com.cursive.eclinic.processor.TimeSlotProcessor]]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@1ee69725]) and a value of type [com.opensymphony.xwork2.ActionContext] (value [com.opensymphony.xwork2.ActionContext@6559e819]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@2513679]) and a value of type [org.apache.struts2.dispatcher.Dispatcher] (value [org.apache.struts2.dispatcher.Dispatcher@21cf431f]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@55cd6225]) and a value of type [org.springframework.aop.framework.Cglib2AopProxy.CglibMethodInvocation] (value [ReflectiveMethodInvocation: public java.util.List com.cursive.eclinic.processor.HospitalDoctorProcessor.list(com.cursive.eclinic.HospitalDoctorCriteria) throws java.lang.Exception; target is of class [com.cursive.eclinic.processor.HospitalDoctorProcessor]]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@1ee69725]) and a value of type [com.opensymphony.xwork2.ActionContext] (value [com.opensymphony.xwork2.ActionContext@7194f54a]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@2513679]) and a value of type [org.apache.struts2.dispatcher.Dispatcher] (value [org.apache.struts2.dispatcher.Dispatcher@21cf431f]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
        SEVERE: The web application [] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@55cd6225]) and a value of type [org.springframework.aop.framework.Cglib2AopProxy.CglibMethodInvocation] (value [ReflectiveMethodInvocation: public java.util.List com.cursive.eclinic.processor.HospitalProcessor.list(com.cursive.eclinic.HospitalCriteria) throws java.lang.Exception; target is of class [com.cursive.eclinic.processor.HospitalProcessor]]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
        Jul 28, 2013 8:27:18 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks



INFO: Illegal access: this web application instance has been stopped already.  Could not load org.apache.log4j.spi.ThrowableInformation.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
        java.lang.IllegalStateException
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1599)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
            at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:154)
            at org.apache.log4j.Category.forcedLog(Category.java:388)
            at org.apache.log4j.Category.log(Category.java:853)
            at com.mchange.v2.log.log4j.Log4jMLog$Log4jMLogger.log(Log4jMLog.java:161)
            at com.mchange.v2.log.log4j.Log4jMLog$Log4jMLogger.log(Log4jMLog.java:173)
            at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:629)
            at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
            at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
            at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
            at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78)
            at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
            at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
            at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
            at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1577)
            at org.hibernate.loader.Loader.doQuery(Loader.java:696)
            at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
            at org.hibernate.loader.Loader.doList(Loader.java:2232)
            at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
            at org.hibernate.loader.Loader.list(Loader.java:2124)
            at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)
            at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1599)
            at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)

汤姆猫管理服务器状态显示在以下位置:
"http-bio-80" Max threads: 200 
Current thread count: 149 
Current thread busy: 146 
Max processing time: 1066526 ms 
Processing time: 26227.367 s 
Request count: 5364 
Error count: 262 
Bytes received: 0.00 MB 
Bytes sent: 127.51 MB

这是内存状态。
Java虚拟机(JVM)。
Free memory: 36.16 MB Total memory: 362.78 MB Max memory: 494.93 MB
Memory Pool Type    Initial Total   Maximum Used
Eden Space  Heap memory 68.31 MB    100.12 MB   136.50 MB   81.74 MB (59%)
Survivor Space  Heap memory 8.50 MB 12.50 MB    17.06 MB    12.50 MB (73%)
Tenured Gen Heap memory 170.68 MB   250.16 MB   341.37 MB   232.37 MB (68%)
Code Cache  Non-heap memory 2.43 MB 11.12 MB    48.00 MB    10.99 MB (22%)
Perm Gen    Non-heap memory 20.75 MB    69.87 MB    82.00 MB    69.76 MB (85%)

这是什么意思?

今天我做了一个明智的决定,在tomcat停止响应之前重新启动它,并得到以下日志,它们有什么含义吗?

Jul 30, 2013 8:37:32 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-80"]
Jul 30, 2013 8:37:32 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-bio-443"]
Jul 30, 2013 8:37:32 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
Jul 30, 2013 8:37:32 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service Catalina
Jul 30, 2013 8:37:33 PM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0] but has failed to stop it. This is very likely to create a memory leak.
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1] but has failed to stop it. This is very likely to create a memory leak.
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2] but has failed to stop it. This is very likely to create a memory leak.
Jul 30, 2013 8:37:33 PM org.apache.catalina.core.ApplicationContext log
INFO: Closing Spring root WebApplicationContext
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/eclinic] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
Jul 30, 2013 8:37:33 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/eclinic] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
Jul 30, 2013 8:37:33 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-80"]
Jul 30, 2013 8:37:33 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["http-bio-443"]
Jul 30, 2013 8:37:33 PM org.apache.coyote.AbstractProtocol stop
INFO: Stopping ProtocolHandler ["ajp-bio-8009"]

我现在发现我的应用程序没有响应,在Tomcat管理器中也是如此。 - Amol Ghotankar
我也遇到了同样的问题,我正在使用Hadoop、Hbase和Jquery。有什么想法吗? - Mohammed Azharuddin Shaikh
3个回答

4

这个问题可能是连接问题,而不是Tomcat的问题。在使用Hibernate时,应该同时使用连接池。否则,有可能会在一定时间后从数据库断开连接,无法建立连接。可以使用类似C3P0这样的实用程序包来解决此问题。此外,请检查Tomcat文件夹中的"catalina.out"文件以获取日志。


我正在使用连接池和c3p0,仍然遇到这个问题。请使用catinia.out日志更新原帖。 - Amol Ghotankar
重启 Tomcat 后可以正常工作,但在 12-18 小时后又停止响应。 - Amol Ghotankar
我曾经遇到过同样的问题,通过使用C3p0连接池解决了这个问题。除了c3P0之外,还需要一些其他的jar文件,请在谷歌上搜索。我认为在连接池的配置中可能有些东西被忽略了。 - Niju
我尝试过很多次在谷歌上解决这个问题,但是确切地找不出问题出在哪里以及如何修复它。 - Amol Ghotankar

1
虽然我不确定您的日志顺序,但似乎您的应用程序按以下顺序失败:
- 一些Hibernate查询无法执行并抛出异常。 - 异常未得到适当处理,可能会保留关键资源(即,您存在内存泄漏 - 可能没有关闭数据库连接或Hibernate会话)。 - 这导致一些线程挂起(其中大部分似乎属于第三方库,但某些是由您的应用程序创建的嫌疑对象)。 - Tomcat检测到这些条件,并尝试关闭相应的服务以恢复服务器的稳定性,最终关闭您的应用程序。
如果您有源代码,请检查所有与数据库相关的代码是否正确工作(即,无论如何都要在finally块中关闭连接/会话),并检查应用程序创建的线程(如果有)是否会优雅地关闭。

谢谢。我会看一下并回复你。但是,无论如何我都可以添加日志,因为这个条件在18小时后重复出现,所以必须等待很长时间。 - Amol Ghotankar

-1

您将在文件"catalina.out"(Tomcat日志)中找到有关错误的更多信息:

C:\program files\apache software foundation\apache-tomcat{ver}\logs\catalina.out

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接