一、故障现象
环境:CentOS release 6.8 (Final) ,java 1.7 数据库oracle 11gR2 写了一个简单的连接数据库的JDBC脚本,连接数据库,几十秒后出现connection reset错误:
[root@tomcat162 ~]# java -cp /tmp/javaclass/ojdbc14-10.2.0.4.0.jar:/tmp/javaclass/ ConnOracleJdbc
start connection database
java.sql.SQLRecoverableException: IO Error: Connection reset
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:498)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at ConnOracleJdbc.testOracle(ConnOracleJdbc.java:30)
at ConnOracleJdbc.main(ConnOracleJdbc.java:12)
出现这个问题有如下几个特征:数据库负载不高,在其他机器的windows中能迅速连接上,在redhat系统中也能迅速连接上。
二、分析问题:在oracle的alert 日志出现如下错误
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.3.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
Time: 20-SEP-2016 19:25:49
Tracing not turned on.
Tns error struct:
ns main err code: 12535
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=172.16.0.111)(PORT=62302))
WARNING: inbound connection timed out (ORA-3136)
Tue Sep 20 20:23:57 2016
三、进一步分析问题:oracle参数SQLNET.INBOUND_CONNECT_TIMEOUT设置为60秒,可以应付绝大部分情况。这里情况是在连接时候超出了60秒,所以alert.log打印上面日志。
四、问题解决:这个问题是java jdk 生成安全随机数的问题
vim /usr/local/jdk/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
改成:
securerandom.source=file:/dev/./urandom
环境:CentOS release 6.8 (Final) ,java 1.7 数据库oracle 11gR2 写了一个简单的连接数据库的JDBC脚本,连接数据库,几十秒后出现connection reset错误:
[root@tomcat162 ~]# java -cp /tmp/javaclass/ojdbc14-10.2.0.4.0.jar:/tmp/javaclass/ ConnOracleJdbc
start connection database
java.sql.SQLRecoverableException: IO Error: Connection reset
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:498)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
at java.sql.DriverManager.getConnection(DriverManager.java:571)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at ConnOracleJdbc.testOracle(ConnOracleJdbc.java:30)
at ConnOracleJdbc.main(ConnOracleJdbc.java:12)
出现这个问题有如下几个特征:数据库负载不高,在其他机器的windows中能迅速连接上,在redhat系统中也能迅速连接上。
二、分析问题:在oracle的alert 日志出现如下错误
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.3.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
Time: 20-SEP-2016 19:25:49
Tracing not turned on.
Tns error struct:
ns main err code: 12535
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=172.16.0.111)(PORT=62302))
WARNING: inbound connection timed out (ORA-3136)
Tue Sep 20 20:23:57 2016
三、进一步分析问题:oracle参数SQLNET.INBOUND_CONNECT_TIMEOUT设置为60秒,可以应付绝大部分情况。这里情况是在连接时候超出了60秒,所以alert.log打印上面日志。
四、问题解决:这个问题是java jdk 生成安全随机数的问题
vim /usr/local/jdk/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
改成:
securerandom.source=file:/dev/./urandom
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30393770/viewspace-2125282/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30393770/viewspace-2125282/