读书人

关于tomcat总是memory leak有关问题

发布时间: 2013-02-17 10:44:46 作者: rapoo

关于tomcat总是memory leak问题
Enumeration<Driver> drivers = DriverManager.getDrivers();while (drivers.hasMoreElements()) {Driver driver = drivers.nextElement();try {DriverManager.deregisterDriver(driver);Logger.getLogger(this.class.getName()).log(Level.INFO,String.format("deregistering jdbc driver: %s",driver), driver);} catch (SQLException e) {Logger.getLogger(this.class.getName()).log(Level.SEVERE,String.format("Error deregistering driver %s",driver), e);}}

?

BasicDataSource's method close() doesn't deregister JDBC driver. This causes permgen memory leaks in web server environments, during context reloads. For example, using Tomcat 6.0.26 with Spring, and BasicDataSource declared in Spring context, there is a message printed at web application reload:

SEVERE: A 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.

I was able to fix it by overriding close method this way:

public class XBasicDataSource extends BasicDataSource {
??? @Override
??? public synchronized void close() throws SQLException {
??????? DriverManager.deregisterDriver(DriverManager.getDriver(url));
??????? super.close();
??? }
}

来源:https://issues.apache.org/jira/browse/DBCP-332

?

关于第二个问题:

created a ThreadLocal with key of type。。。。。This is very likely to create a memory leak.

http://blog.csdn.net/zhuhezan/article/details/6882089

?

但是有一点,关闭后,只是不检查了。问题还是存在那的。怎么感觉像 掩耳盗铃

读书人网 >开源软件

热点推荐