开发环境中,一直使用热部署;
当重新编译的时候,有些资源不能够释放,从而占用了内存;多热部署几次就内存溢出了。
今天解决了这几个问题;
在实际项目中,主要是这几类资源无法释放:
1,连接池
2,自己写的任务队列线程,
3,mysql的线程;
爆出的warning大概是:
[MySQL S tatement Cancellation Timer] but has failed to stop it. This is very likely to c reate a memory leak.
类似的问题应该是都是资源无法释放;
那我们就从这里入手:
1,释放连接池不能释放的资源:
1)如果你用的是common-dbcp 可以参考这个:
2)如果是连接池,可以开启一个context的监听器:
public class ContextDestroyedListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("you must be reload tomcat....please waiting ...");
CacheManager.shutdown();
Enumeration drivers = DriverManager.g