c3p0连接池checkoutTimeout

       开始程序执行Hibernate调用数据库查询的时候,隔一段时间会挂死,以至于连接该数据库的所有操作都无法执行。

怀疑是oracle分页查询的问题,网上也确实有说,分页排序需要添加主键或唯一键,不然导致分页重复记录,问题不在这。

优化c3p0配置参数,开始设了最大连接数100(后面发现这是导致为什么程序需要执行一段时间之后才挂死的原因之一),添加100,即:程序从连接池checkout session的时候
等待100毫秒,超时则抛出异常;后面程序不会出现挂死现象,只是数据库的操作永远不会成功,都是
checkoutTimeout异常。网上很多关于这个问题的说发:

1.c3p0和oracle兼容性不好换proxool;

2.spring的事务管理不能使用;

3. 设置unreturnedConnectionTimeout,使checkout的session超时强行回收。

最后分析得出:应该是最大session数都被用完了,没有正常返回连接池;如果有类似的情况,请检查自己的程序:1.是不是所有调用数据库的操作都session.close();2.使用事务管理的,对所有数据库的操作都注明有@Transactions。程序经过排查后恢复正常。

另外:数据库的session最大连接数5个就够用了,上面设置100无形中给调试增加了难度。
转载自:https://blog.csdn.net/renshenguo/article/details/44398775

你可能感兴趣的:(JavaWeb)