数据库连接池满的问题

数据库连接池满的问题

ID:35504877

大小:54.87 KB

页数:4页

时间:2019-03-25

数据库连接池满的问题_第1页
数据库连接池满的问题_第2页
数据库连接池满的问题_第3页
数据库连接池满的问题_第4页
资源描述:

《数据库连接池满的问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、XX系统在生产环境使用一定时间后表现出川八不能登录,后台tomcat日志报如下错:2008-08-1412:31:35,029[org.hibernate.util.JDBCExceptionReporter]-[WARN]SQLError:0,SQLStale:null2008-08-1412:31:35,029[org.hibernate.util.JDBCExceptionReporter]-[ERROR]Cannotgetaconnection,poolexhausted2008-08-1412:3

2、1:35,029[org.hibernate.util.JDBCExceptionReporter]-[WARN]SQLError:0,SQLState:null2008-08-1412:31:35,029[org.hibernate.util.JDBCExceptionReporter]-[ERROR]Cannotgetaconnection,poolexhausted显然是连接池满了,驻地丁程师重启Z后就可以正常使用了。因为我们的tomcat连接池的配置连接参数好像很大,所以应该肯处是程净出问题了。后來

3、在测试那也出现了同样的问题,因为测试的人比较多,所以那两天基木上一-两个小时连接池就满了,当时只能--次一次的重启tomcato因为XX系统之前已经修改过-次因为代码的错谋而导致的数据库连接没冇释放的问题,所以这一次的问题比较不好定位,不能知道是哪些操作的连接池没有释放。后來由zhxy提供了如下的杳看当前数据库(Sybase)哪些连接没有被释放的脚本,其中的ip为tomcat的发布地址(因为数据库连接都是山tomcat发起):declarecur_spidcursorforselectspidfromsys

4、processeswhereipaddr'172.16.7.8'godeclare@spidIntegeropencur_spidfetchcur_spidinto@spidwhile@@sqlstatus=Obeginprint9%1!9,@spiddbcctraccon(3604)dbccsqltext(@spid)fetchcur_spidinto@spidendclosecur_spid使用该脚本只能Z后,执行结果都是打印岀大量类似的下面的三行:184DBCCexecutioncompleted.I

5、fDBCCprintederrormessages,contactauserwithSystemAdministrator(SA)role.SQLText:setCHAINEDoff直接使用上而的脚本打印的结果是当前占川数据库连接池的spid(第一行),以及连接止在执行的sql(第三行)。后来发现每登录一次审判系统,使用上面的脚木执行结果就会冇一•个连接没冇被释放(-•般连接会在一段时间Z后释放),除非是重启tomcat否则一立占用。跟踪登陆代码发现有如下的写法(调用存储过程):Sessionsession

6、=this.getSession();Transactiontx=session.beginTransaction();Connectioncon=session.connection。;try{//……CallableStatementcstmt=con.prepareCall(M{callK_TJ..PR_GET_AjCount//……ResultSetresultSet=cstmt.executeQueryO;tx.commit();if(resultSet.next())ajCount=result

7、Set.getlnt(l);rcsultSct.closcO;}catch(Exceptione){lx.rollback();e.printStackTrace();return0;}finally}try{con.close();}catch(SQLExceptione){c.printStackTracc();}}这里有儿个问题,一是把hibernate和connection的用法使用混乱了;二是使用session获取的连接不需要自己关闭,应该关闭session(一个session对应一个connec

8、tion),这里刚好用使用反了。后來试着把con.close()改成session.close()问题就没有了,后來经zhangjy提醒,如果是使用spring提供的getSession()获取的连接,最好是使用releaseSession()方法进行释放。引用原话-release不一定是关闭连接,就像连接池的连接一样。release只是放回池中,你要关闭了就不能放回池屮了而且直接closenJ'能会抛异常,re

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。