druid 連接池 close connection error

[ERROR]2018-06-29 01:55:38,392 - com.alibaba.druid.util.JdbcUtils -close connection error
java.sql.SQLRecoverableException: IO Error: Connection reset
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:770)
    at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:4581)
    at com.alibaba.druid.filter.FilterChainImpl.connection_close(FilterChainImpl.java:175)
    at com.alibaba.druid.filter.stat.StatFilter.connection_close(StatFilter.java:261)
    at com.alibaba.druid.filter.FilterChainImpl.connection_close(FilterChainImpl.java:171)
    at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.close(ConnectionProxyImpl.java:115)
    at com.alibaba.druid.util.JdbcUtils.close(JdbcUtils.java:73)
    at com.alibaba.druid.pool.DruidDataSource.shrink(DruidDataSource.java:2662)
    at com.alibaba.druid.pool.DruidDataSource$DestroyTask.run(DruidDataSource.java:2427)
    at com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:2414)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at oracle.net.ns.Packet.receive(Packet.java:311)
    at oracle.net.ns.DataPacket.receive(DataPacket.java:105)
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:305)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:249)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:171)
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:89)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123)
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79)
    at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:426)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:390)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
    at oracle.jdbc.driver.T4C7Ocommoncall.doOLOGOFF(T4C7Ocommoncall.java:59)
    at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:757)

    ... 9 more


根據druid監控看出 打開連接池最大緩存爲20個


 

可是真實打開和關閉的連接  遠大於20個 則連接泄露   

 


close connection error   關閉連接錯誤  也就是說在關閉連接的時候這個連接就已經失效啦 

有可能還會有  close statement error  這個錯誤和上面同理


但是怎麼解決還在摸索中  ,  在網上的大浪中基本上都是說 

<!-- 打開 removeAbandoned 功能  -- true
          30 分  --1800
   關閉 logAbandoned連接時輸出錯誤日誌 --true
       <property name = "removeAbandoned" value = "${jdbc.oracle.removeAbandoned}" />  
       <property name = "removeAbandonedTimeout" value ="${jdbc.oracle.removeAbandonedTimeout}" />  
       <property name = "logAbandoned" value = "${jdbc.oracle.logAbandoned}" /> 
-->


打開removeAbandoned 之後還是沒有解決這個問題


poolPreparedStatements 爲false 時  PreparedStatement打開 和關閉數正常    但是問題還是沒有得到解決



最終解決辦法爲 :


獲取連接時驗證該連接是否可用

jdbc.oracle.testOnBorrow=true

__只能暫時用這個方法解決當前問題 

正常情況下他是不需要將testOnBorrow設置爲true


郵箱地址 [email protected]  如果錯誤請聯繫我  或者私信我


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章