1

我在 HPC(高性能计算)集群上运行 Java 应用程序。该应用程序通过与 Oracle 11.2.0 数据库建立 JDBC 瘦连接。鉴于这是在集群上,因此会同时建立和维护大量连接(尽管与数据库的实际交互相对较少)。潜在的最大并发连接数将是 4500(尽管它永远不会达到那么高)。

该应用程序工作正常,直到第 125 个并行连接失败并出现以下错误。此错误消息在后续连接尝试中仍然存在:

java.sql.SQLException: No more data to read from socket
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:209)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1129)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1080)
at oracle.jdbc.driver.T4C8TTIpro.receive(T4C8TTIpro.java:131)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:902)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:269)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:454)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:802)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)

我是否认为这与数据库允许的连接数限制有关?或者这与数据库上的负载有关吗?

有没有人知道我可以如何解决这个问题,以便我能够并行建立更多数量的连接?

提前谢谢了。

4

1 回答 1

0

可能只是您的连接池,如果您使用的是连接池,我希望 Oracle 可以处理超过 125 个。即您选择的方法有一个人为的上限 125,很可能默认情况下比您自己强加的上限。

您是否使用诸如 Spring 之类的东西来管理您的连接,例如通过 Apache Commons DBCP 库?

此外,您实际上是否一直有/需要 4500 个连接,或者您是否有 4500 个线程,每个线程都需要突发的数据库连接?如果是后者,例如 500 个连接池可能就足够了。

编辑:当然,它可能是一个打击你的 Oracle 配置;看看这个早先的SO问题:

如何检查允许连接到 Oracle 数据库的最大数量?

于 2011-10-21T12:50:44.897 回答