首页 新闻 会员 周边 捐助

JDBC连接池偶尔提示"Io 异常: The Network Adapter could not establish the connection"

0
悬赏园豆:50 [已关闭问题] 关闭于 2015-02-06 18:13

错误提示:Io 异常: The Network Adapter could not establish the connection
数据库服务器端环境:Linux + Oracle10g   DB连接数约为300
应用服务器端环境:linux + jdk6 
数据库连接池工具包:Oracle_JDBC_classes12.jar

j2se应用程序。

现象描述:
  程序偶尔出现上述异常提示,我的程序内建有连接池重置处理,当出现上述异常后,自动重置连接池,一般能够重新连接上数据库。

排除问题:
  1、url连接串之类的问题
  2、网络问题
  3、其他简单配置问题(生产环境已经运行3年)

怀疑问题:
  1、是否服务器连接数不够?(自己做过实验,当应用达到DB最大连接数时的提示为拒绝连接,与此不同)
  2、是否其他应用消耗DB服务器资源?(有怀疑,但没有证据,如哪位仁兄遇到类似问题,望不吝赐教)

这个问题有些棘手,以前前辈遇到过这样的问题,提出的解决方式是:

“侦听日志比较大,经过检查,发现是由于程序连接相对比较频繁导致,深究其道理一说就明白了:
  Windows下Oracle简单说是以线程为主进行请求响应的,因此连接频繁不会导致连接断提示;
  Unix/Linux下Oracle简单说是以进程为主进行请求响应的,进程的启动毕竟需要的资源比线程要大,请求频繁后导致部分请求的进程来不及启动,这时就出现了上面的提示。

解决方法很简单,进行连接的缓冲,对于一个Servlet线程内的连接进行缓冲,每段程序的连接获取首先从缓冲中获取自己线程的缓冲连接进行处理,而不是直接申请连接然后释放连接,最终Servlet线程生命终结时进行统一释放。这样的处理虽然把事务一定程度上拉长,但与原始要求基本一致,保持了Servlet请求生命周期内的事务完整。

 

在此请问各位是否有遇到此类问题?是如何解决?

六年笋的主页 六年笋 | 菜鸟二级 | 园豆:204
提问于:2014-12-03 16:21
< >
分享
所有回答(1)
0

呵呵。。。

六年笋 | 园豆:204 (菜鸟二级) | 2015-02-06 18:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册