ojdbc在linux環境下 java.sql.SQLRecoverableException: IO Error: Connection reset 的問題


開門見山,最快捷的驗證方法和解決方案:java -Djava.security.egd=file:///dev/urandom  -jar  xxxxxxx.jar

描述下問題:寫了個jar工具,用到了連接池,ojdbc。windows環境一切正常。linux環境下啟動關閉兩三次后就出現 java.sql.SQLRecoverableException: IO 錯誤: Connection reset

排查配置文件和解析問題, 無果。

使用最新ojdbc包,無果。

更換hikari到druid,無果。

無奈搜索一番,找到了上述方案,解釋下出現這個問題的原因:

連接ORACLE服務器,客戶端要生成隨機密鑰用於客戶端認證,linux下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)

其他解決方案:

編輯$JAVA_HOME/jre/lib/security/java.security將securerandom.source=file:/dev/random 改為file:/dev/urandom(urandom采用非陰塞式生成隨機數,性能很好,不會產生超時)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM