Oracle JDBC池SocketException:启动时重置连接

时间:2018-05-30 12:59:19

标签: java oracle jdbc

我以前在启动应用程序时遇到了几次连接重置错误 可能的原因是什么,我该如何解决这个问题?

    ...
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:115) ~[?:1.8.0_121]
    at java.net.SocketOutputStream.write(SocketOutputStream.java:155) ~[?:1.8.0_121]
    at oracle.net.ns.DataPacket.send(DataPacket.java:209) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.net.ano.CryptoDataPacket.send(Unknown Source) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:215) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:302) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:249) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:171) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.net.ns.NetInputStream.read(NetInputStream.java:89) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:123) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:79) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CMAREngineStream.unmarshalUB1(T4CMAREngineStream.java:429) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:397) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:437) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:954) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:639) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566) ~[ojdbc7-12.1.0.2.jar:12.1.0.2.0]
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:310) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:732) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:664) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:479) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131) ~[tomcat-jdbc-8.5.11.jar:?]
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) ~[spring-jdbc-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77) ~[spring-jdbc-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:326) ~[spring-jdbc-4.3.6.RELEASE.jar:4.3.6.RELEASE]
    ... 61 more

1 个答案:

答案 0 :(得分:1)

添加JVM系统可能会有所帮助:

-Djava.security.egd=file:/dev/../dev/urandom

java.security.SecureRandom是sun提供的标准API。在这个类void提供的各种方法中 的nextBytes(字节[]) 是一个。该方法用于生成随机字节。 Oracle 11g JDBC驱动程序使用此API在期间生成随机数 登录。使用Linux的用户遇到了SQLException(&#34; Io异常:连接 复位&#34;。)

问题是双重的

  1. JVM尝试列出/ tmp(或-Djava.io.tmpdir设置的备用tmp目录)中的所有文件 调用SecureRandom.nextBytes(byte [])。如果文件数量很大的话 方法需要很长时间 响应并因此导致服务器超时

  2. 方法void nextBytes(byte [])在Linux和一些缺少随机的机器上使用/ dev / random 数字生成硬件操作减慢到整个登录过程的程度 停了下来。最终用户遇到SQLException(&#34; Io异常: 连接重置&#34;)

  3. 如果底层操作系统是在故障硬件上运行的Linux,则升级到11g的用户可能会遇到此问题。

    原因 其原因尚未确切确定。它可能是一个问题 你的硬件或事实 由于某种原因,软件无法从dev / random

    读取

    source

相关问题