为什么 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 拒绝连接时会发生此错误。在我们的案例中发生这种情况的原因是因为服务器超载(它没有 运行 连接中断)并且不接受任何新请求。