解決java connection

e71hao發表於2016-09-21
一、故障現象
環境: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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章