为什么 apache.commons.dbcp2 连接池在尝试创建新连接时出现套接字错误?
Why does apache.commons.dbcp2 connection pool gets socket error when trying to create a new connection?
我在生产中随机遇到错误。
当我们的负载激增并且应用程序尝试进行大量插入时,就会发生这种情况。
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:39)
at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:205)
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:836)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:434)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
at org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:102)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
连接池应该能够在耗尽现有连接时创建新连接。
连接池最大限制为100
最小值为 8。
为什么池无法创建连接?
在我的研究中,我发现有人建议使用这个参数
oracle.jdbc.ReadTimeout
但我不服气
在查看日志和 Oracle 文档后,当 oracle 拒绝连接时会发生此错误。在我们的案例中发生这种情况的原因是因为服务器超载(它没有 运行 连接中断)并且不接受任何新请求。
我在生产中随机遇到错误。 当我们的负载激增并且应用程序尝试进行大量插入时,就会发生这种情况。
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:666)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:566)
at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:39)
at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:205)
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:836)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:434)
at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
at org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:102)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
连接池应该能够在耗尽现有连接时创建新连接。
连接池最大限制为100
最小值为 8。
为什么池无法创建连接?
在我的研究中,我发现有人建议使用这个参数
oracle.jdbc.ReadTimeout
但我不服气
在查看日志和 Oracle 文档后,当 oracle 拒绝连接时会发生此错误。在我们的案例中发生这种情况的原因是因为服务器超载(它没有 运行 连接中断)并且不接受任何新请求。