通过我们的 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 天后在相同的代码(即连接到数据库时)再次发生错误。我们使用 netstat 检查 TCP 连接。但是没有多少 TCP 连接,即它没有达到最大限制。
我们的应用程序有多个长时间运行的 Java 进程,它们汇集了数据库连接(不超过 60 个)并保持其活动状态以触发下一个查询(因为它必须每 2 秒轮询一次数据库)。我们应用程序中的一些查询正在连接大型表(1000 万条记录)以获取相关数据。
我们正在使用以下系统和应用程序
- Windows 2003 服务器 SP2
- Java 1.6
- Postgres Plus 高级服务器 8.4 数据库
edb-jdbc14.jar
Java 连接数据库的驱动程序
除了将连接数从 100 增加到 120 之外,我们使用了 Postgres DB 的默认配置。
有人在 postgres edb 驱动程序中遇到过同样的错误吗?
任何人都可以帮助我们找到解决方案吗?