linux 下 java.sql.SQLRecoverableException: IO Error: Connection re
(2017-08-31 22:27:30)
标签:
linuxoracledatasoucejdbcreset |
分类: 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
问题 现象:连接池无法初始化,报如下错误:
原因:连接ORACLE服务器,客户端要生成随机密钥用于客户端认证,JDK默认使用/dev/random,random采用阻塞方式生成随机数,生成的速度很慢,ORACLE服务器会主动reset,并在alert.log中报错:
TNS-12535: TNS:operation timed out
WARNING: inbound connection timed out (ORA-3136)
解决方法:
将securerandom.source=file:/dev/random 改为file:/dev/urandom(urandom采用非阴塞式生成随机数,性能很好,不会产生超时)