求教:关于DBCP连接池的问题

buoll 2009-08-20 10:06:53
运行环境:tomcat5.5 + sql server 2000 sp3 + jdk1.5,
tomcat和数据库在不同的服务器上

问题描述:运行一段时间后(一般是一两天)在重启应用程序时报以下错误
java.sql.SQLException: Network error IOException: Address already in use: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:371)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)
at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:771)
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)

个人分析认为:由于WEB服务器与数据库服务器的网络不稳定,中途出现连接池中存在没关闭的连接就与数据库断开网络。
求解决办法。

也有可能原因分析不对,欢迎拍砖
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnson_Hong 2009-08-20
  • 打赏
  • 举报
回复
应该是连接有泄漏,把手工的操作写成测试脚本做个压力测试,然后观察连接池里的连接状态,以及数据库的连接状态
xiciliu 2009-08-20
  • 打赏
  • 举报
回复
至于你这个问题,需要具体看代码。
没准你在哪个地方哪个东西没有关闭,又企图再次调用。比如循环嵌套中的 statement等。

另外一个就是藏得比较深的问题。
建议读http://support.microsoft.com/kb/328476/zh-cn文中的调整 WinsockListenBacklog 设置
段落。
检查并尝试。或许有帮助。
buoll 2009-08-20
  • 打赏
  • 举报
回复
TO 4楼
这里使用的连接池就是在TOMCAT中配置的JNDI的。
buoll 2009-08-20
  • 打赏
  • 举报
回复
曾经试过用自己写的连接池,同样在正常运行一段时间后,在使用连接池中的连接时会报以下错误:
com.microsoft.jdbc.base.BaseSQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
at com.microsoft.jdbc.base.BaseConnectionStartup.run(Unknown Source)

重启项目后同样连不上数据库,必须重启TOMCAT。
PS:自己写的连接池是在项目中管理的,即随项目的启动而创建,随项目的关闭而销毁。
xiciliu 2009-08-20
  • 打赏
  • 举报
回复
数据库的链接需要严重对待。
否则就很容易出现资源消耗严重,连接数满了等的问题。
tomcat可以使用自带连接池的处理。
建议使用proxool,这个东西还是比较简单好用。

buoll 2009-08-20
  • 打赏
  • 举报
回复
偶尔这样,一般是运行一段时间就会这样。

重启TOMCAT后是可以正常运行的,但只重启项目即会报以上错误。
jhandsome007 2009-08-20
  • 打赏
  • 举报
回复
是每次都出现那样的问题吗?

LZ 在重启之前先执行下 shutdown.bat 呢 ..
xinyung 2009-08-20
  • 打赏
  • 举报
回复
buoll 2009-08-20
  • 打赏
  • 举报
回复
应该不会存在泄漏的问题,每次checkout和checkin连接时都有写LOG,也有计算,但都没发现任何问题。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧