读书人

tomcat 错误

发布时间: 2012-11-23 00:03:43 作者: rapoo

tomcat 异常
Tomcat6.0的Thisisverylikelytocreateamemoryleak.错误解决作者:tiantangpw | 2012/7/13 15:23:17 | 阅读94次
Apache Tomcat 5.5升到6.0,通常不用太大的修改,原有的Web Application就能作。不在server.xml中定MySQL Datasource,出一串人的警告息:

2010/8/6 下午 01:54:11 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
重的: The web application [/] registered the JBDC 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.
2010/8/6 下午 01:54:11 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
重的: 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.
2010/8/6 下午 01:54:11 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
重的: 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.

更新MySQL Connector/J至最新版也用,似乎是Tomcat 6.0於Memory Leak的防得比婆智慧,才多了的警告。

既然被列重程度的警告,然就不能而不,解的方法不,只是要把原本定在段中的搬到,修改方式如下。

1. <Resource name="jdbc/NAME" auth="Container" type="javax.sql.DataSource" ... /> 整剪下,再到 <GlobalNamingResources> ... </GlobalNamingResources> 之。

2. 在原本Resource的位置加入<ResourceLink global="jdbc/NAME" name="jdbc/NAME" type="javax.sql.DataSource" />



2011-11-09 10:40 tomcat memory leak 在tomcat(版本6.0.33)的 catalina.out中发现大量memory leak的日志

org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap

SEVERE: The web application [] created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@2618d45f]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@51dce88]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak.



这个是由于tomcat6.0.24以后的版本有加一个监控memory leak的listener 在tomcathome/conf/server.xml


<!-- Prevent memory leaks due to use of particular java/javax APIs-->

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

但是这个监控有bug才导致的误报




解决方式任选一种 1 把tomcat降级为6.0.24以下的版本



2 将tomcat升级为7.0.6以上的版本

3 在server.xml中去掉JreMemoryLeakPreventionListener的listener


http://wiki.apache.org/tomcat/MemoryLeakProtection

读书人网 >Web前端

热点推荐