关于too many connections问题产生原因的理解
2013-02-24 15:02
399 查看
产生too many connections 的直接原因是因为数据库提供的连接被全部占满了。数据库可以提供多少连接,可以再my.cnf(linux)或者my.ini(windows)下设定。这个直接原因的上一次原因是引用程序占据连接不释放。至于为何不释放,那就是各个应用程序的具体问题了。
之前 ,遇到这个问题时,在网上找了很多关于这方面的资料,发现都不能解决这方面的问题。网上的资料只能提供一个共性的解决方案,无法提供个性的解决方案。而且,感觉网上的资料随意转载 ,没说明应用环境,有点不负责任。所以,从这个事件中,我感受到,解决自己的问题,还是得靠自己的逻辑分析。
在使用数据库连接池时,会配置数据库连接池的最小连接数,最大连接数以及默认连接数。在初始化数据库连接池时,配置的最小连接数就会来占据数据库提供的连接,而且这个连接是关闭tomcat之前,不会被释放的。列如:如果你配置的数据库连接池最小的连接数是20,那么,在tomcat上启动该应用程序,在用Mysql的线程查看命令:mysql>show processlist;时,你会发现,会有21条线程。这是因为会留有一条线程用于操作。show processlist命令显示的是Thread_connected,当Thread_connected与max_connections相等时,在企图进行数据库连接,就会出现too
many connections的错误。
如果将数据库连接池交由spring管理,那么,每初始化一个spring管理容器,就会初始化一个数据库连接池,也就是(以上面配置的数据库连接池最小连接数为例)说,会占据20个数据库提供的线程,而且除非停掉tomcat,否则不会释放。这种情况下,若采用ClassPathApplicationContext(具体不太记得了,大概就这个意思)这种方式来开启一个spring容器,那么,而程序又是要被周期性调度执行,那么数据库的连接数无论被设为多大都没用。时间一长,就会出现too many connections的错误。
转自:http://blog.csdn.net/iamaboyy/article/details/7694895
下面是我遇到的too many connections问题
这个是产生bean的类,用它可以调用ApplicationContext的getBean()
发生too many connection时我是这么调用的
用
show processlist查看将近有好几十个sleep状态的连接(因为同一个actionnew ServiceProvinder().getBean好几次)
![](http://img.my.csdn.net/uploads/201302/24/1361689467_8547.png)
,说明了
每初始化一个spring管理容器,就会初始化一个数据库连接池,也就是(以上面配置的数据库连接池最小连接数为例)说,会占据20个数据库提供的线程。
而改用
只有一个applicationContext时,show processlist很少,只有21个,所以不会那么容易就too many connection
之前 ,遇到这个问题时,在网上找了很多关于这方面的资料,发现都不能解决这方面的问题。网上的资料只能提供一个共性的解决方案,无法提供个性的解决方案。而且,感觉网上的资料随意转载 ,没说明应用环境,有点不负责任。所以,从这个事件中,我感受到,解决自己的问题,还是得靠自己的逻辑分析。
在使用数据库连接池时,会配置数据库连接池的最小连接数,最大连接数以及默认连接数。在初始化数据库连接池时,配置的最小连接数就会来占据数据库提供的连接,而且这个连接是关闭tomcat之前,不会被释放的。列如:如果你配置的数据库连接池最小的连接数是20,那么,在tomcat上启动该应用程序,在用Mysql的线程查看命令:mysql>show processlist;时,你会发现,会有21条线程。这是因为会留有一条线程用于操作。show processlist命令显示的是Thread_connected,当Thread_connected与max_connections相等时,在企图进行数据库连接,就会出现too
many connections的错误。
如果将数据库连接池交由spring管理,那么,每初始化一个spring管理容器,就会初始化一个数据库连接池,也就是(以上面配置的数据库连接池最小连接数为例)说,会占据20个数据库提供的线程,而且除非停掉tomcat,否则不会释放。这种情况下,若采用ClassPathApplicationContext(具体不太记得了,大概就这个意思)这种方式来开启一个spring容器,那么,而程序又是要被周期性调度执行,那么数据库的连接数无论被设为多大都没用。时间一长,就会出现too many connections的错误。
转自:http://blog.csdn.net/iamaboyy/article/details/7694895
下面是我遇到的too many connections问题
这个是产生bean的类,用它可以调用ApplicationContext的getBean()
package cn.itcast.crm.container; public class ServiceProvinder { private static ApplicationProvider applicationProvider = new ApplicationProvider(); static{ applicationProvider.load("beans.xml"); } public static Object getBean(String beanName){ if (beanName==null || beanName.length()==0) { throw new RuntimeException("bean名字为空"); } Object beanObject= applicationProvider.act.getBean(beanName); if (beanObject==null) { throw new RuntimeException("bean名字不存在"); } return beanObject; } }
package cn.itcast.crm.container; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ApplicationProvider { protected static ApplicationContext act; public ApplicationContext load(String beanPath) { act = new ClassPathXmlApplicationContext(beanPath); return act; } }
发生too many connection时我是这么调用的
private ICompanyService companyService= (ICompanyService)new ServiceProvinder().getBean(ICompanyService.SERVICE_NAME);
用
show processlist查看将近有好几十个sleep状态的连接(因为同一个actionnew ServiceProvinder().getBean好几次)
![](http://img.my.csdn.net/uploads/201302/24/1361689467_8547.png)
,说明了
每初始化一个spring管理容器,就会初始化一个数据库连接池,也就是(以上面配置的数据库连接池最小连接数为例)说,会占据20个数据库提供的线程。
而改用
private ICompanyService companyService= (ICompanyService)ServiceProvinder.getBean(ICompanyService.SERVICE_NAME);
只有一个applicationContext时,show processlist很少,只有21个,所以不会那么容易就too many connection
相关文章推荐
- 关于too many connections问题产生原因的理解
- 关于PHP出现Too many connections 的问题
- 关于MySQL的 too many connections
- MySQL 1040 Too many connections 问题解决
- 解决Too many connections问题
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
- RHEL修改最大文件打开数,关于epoll socket Too many open files问题的解决
- 问题解决:1040-Too many connections 错误
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
- MongoDB numa系列问题一:[initandlisten] connection refused because too many open connections:
- 关于mina框架里产生too many open files的错误的解决办法
- 找到一篇比较全面的解决mysql最大连接数Too many connections问题的帖子
- HiveServer2连接ZooKeeper出现Too many connections问题的解决
- Mysql中too many connections问题
- 关于Linux 进程 open too many files 的问题
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
- MySQL中too many connections问题解决
- 解决小小书屋网访问时MySQL连接问题:Too many connections
- 解决Mysql数据库访问出现“Too many connections”问题