日期:2014-05-16  浏览次数:20984 次

请教连接池泄漏的问题
我的应用层连接池最大连接数maxactive=100

oracle参数 processes=200 sessions=300

由于是开发调试,会常常重启应用服务,一段时间后 就因为连接数满而无法连接了,
v$process 的记录数达到190多,接近200,
从而只能使用kill session的方式清除

初步分析,在当前的应用服务器运行期间,连接数量变化不会超过100,
但是应用重启(甚至关机)之后,有时候没有释放数据库连接,
从而造成连接数量累计

请教:如何避免这种情况?
另外,我昨天将一些session kill掉了 状态成了 killed
但是今天了 v$session里还有这些killed状态的session,
这么长时间 相应的process 为什么没有被PMON进程回收呢?

------解决方案--------------------
貌似你说的不大对哦,你重启后进程肯定会清空了,你之所以进程上去是你程序出问题了,检查下数据库连接关闭了吗。如果是JDBC连接库,看看是否关闭,如果是框架,看看事务是否管理了。调试阶段,重新启动服务器数据库进程会降到10个左右的。而且你也可以设置进程注销时间的,没有必要手工KILLED。
------解决方案--------------------
应该是应用程序的问题,检查下连接数据库的地方。我之前也遇到过,应用程序关了,但是连接没有释放所有还占用一个session