加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux 下 java.sql.SQLRecoverableException: IO Error: Connection re

(2017-08-31 22:27:30)
标签:

linux

oracle

datasouce

jdbc

reset

分类: java
应用环境:
      操作系统:CentOS7 x64
      jdk:ORACLE JDK 1.8
       应用:j2ee应用,采用druid连oracle数据库,驱动为ojdbc7.jar;
问题 现象:连接池无法初始化,报如下错误:
       java.sql.SQLRecoverableException: IO Error: Connection reset
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection. ~[ojdbc7-12.1.0.2.0.jar!/:12.1.0.2.0]
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection. ~[ojdbc7-12.1.0.2.0.jar!/:12.1.0.2.0]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension. ~[ojdbc7-12.1.0.2.0.jar!/:12.1.0.2.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver. ~[ojdbc7-12.1.0.2.0.jar!/:12.1.0.2.0]
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl. ~[druid-1.1.0.jar!/:1.1.0]
    at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter. ~[druid-1.1.0.jar!/:1.1.0]
    at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl. ~[druid-1.1.0.jar!/:1.1.0]

原因:连接ORACLE服务器,客户端要生成随机密钥用于客户端认证,JDK默认使用/dev/random,random采用阻塞方式生成随机数,生成的速度很慢,ORACLE服务器会主动reset,并在alert.log中报错:
TNS-12535: TNS:operation timed out
    ns secondary err code: 12606
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
  Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.6.21)(PORT=33460))
WARNING: inbound connection timed out (ORA-3136)



解决方法:
    方法1:编辑$JAVA_HOME/jre/lib/security/java.security
将securerandom.source=file:/dev/random 改为file:/dev/urandom(urandom采用非阴塞式生成随机数,性能很好,不会产生超时)
     方法2:加启动参数:-Djava.security.egd=file:/dev/urandom

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有