没有可用的缓冲区空间(达到最大连接数?)表格Postgres EDB驱动程序

时间:2011-01-11 09:35:14

标签: java postgresql jdbc socketexception

我们在通过java应用程序连接数据库时遇到异常。堆栈跟踪如下

com.edb.util.PSQLException: The connection attempt failed.
 at com.edb.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:189)
 at com.edb.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
 at com.edb.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:161)
 at com.edb.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
 at com.edb.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.java:24)
 at com.edb.Driver.makeConnection(Driver.java:391)
 at com.edb.Driver.connect(Driver.java:266)
 at java.sql.DriverManager.getConnection(Unknown Source)
 at java.sql.DriverManager.getConnection(Unknown Source)
 ... 12 more
Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
 at java.net.PlainSocketImpl.socketConnect(Native Method)
 at java.net.PlainSocketImpl.doConnect(Unknown Source)
 at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
 at java.net.PlainSocketImpl.connect(Unknown Source)
 at java.net.SocksSocketImpl.connect(Unknown Source)
 at java.net.Socket.connect(Unknown Source)
 at java.net.Socket.connect(Unknown Source)
 at java.net.Socket.<init>(Unknown Source)
 at java.net.Socket.<init>(Unknown Source)
 at com.edb.core.PGStream.<init>(PGStream.java:70)
 at com.edb.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:115)
 ... 20 more

发生错误时,我们无法连接到互联网和数据库,必须重新启动系统。但是在相同代码的3天后,即连接到DB时,错误再次发生。我们使用netstat检查了TCP连接。但是没有很多TCP连接,即它没有达到最大限制。

我们的应用程序有多个长时间运行的Java进程,它们汇集数据库连接(不超过60个)并使其保持活动状态以触发下一个查询(因为它必须每2秒轮询一次数据库)。我们的应用程序中的一些查询正在加入大表(1000万条记录)以获取相关数据。

我们正在使用以下系统和应用程序

  • Windows 2003服务器SP2
  • Java 1.6
  • Postgres Plus高级服务器8.4数据库
  • 来自Java的
  • edb-jdbc14.jar连接数据库驱动程序

我们使用了Postgres DB的默认配置,只是将连接从100增加到120

有没有人用postgres edb驱动程序包含相同的错误?

有人可以帮助我们找到解决方案吗?

2 个答案:

答案 0 :(得分:1)

这看起来像是客户端问题 - 它甚至无法连接到服务器。当它没有可用的服务器连接时,它是从PostgreSQL或Advanced Server获得的错误。

问题出在客户端程序/ JVM的资源中,或者在EDB JDBC驱动程序中的某个位置。如果您在JVM中找不到不正确的内容,并且因为您使用的是PostgreSQL Plus Advanced Server,我建议您使用EnterpriseDB支持来获取有关其JDBC驱动程序的帮助。 (这与PostgreSQL不同)

答案 1 :(得分:0)

这似乎是客户端Windows问题,不一定是代码问题。 请参阅to my answer to a similar question on stackoverflow