Нет свободного места в буфере (достигнуто максимальное количество подключений?) - PullRequest
2 голосов
/ 11 января 2011

Мы сталкиваемся с исключением при подключении к базе данных через наше 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 дня в том же коде, т.е. при подключении к БД.Мы проверили TCP-соединения с помощью netstat.Но TCP-соединений было немного, т. Е. Он не достиг максимального предела.

Наше приложение имеет несколько долго выполняющихся процессов Java, которые объединяют соединения с БД (не более 60) и поддерживают его для запуска следующего запроса.(так как он должен опрашивать БД каждые 2 секунды).Некоторые запросы в нашем приложении объединяют большие таблицы (10 миллионов записей) для получения связанных данных.

Мы используем следующие системы и приложения

  • Сервер Windows 2003 SP2
  • Java 1.6
  • Сервер Postgres Plus Advanced 8.4 База данных
  • edb-jdbc14.jar драйвер для подключения к базе данных из Java

Мы использовали конфигурацию по умолчанию для Postgres DB, за исключением увеличения соединения до 120 со 100.

Кто-нибудь встречал такую ​​же ошибкус драйвером postgres edb?

Кто-нибудь может помочь нам найти решение?

Ответы [ 2 ]

1 голос
/ 11 января 2011

Это похоже на проблему на стороне клиента - ему никогда не удается даже подключиться к серверу. Это , а не ошибка, которую вы получаете от PostgreSQL или Advanced Server, когда у него заканчиваются доступные соединения с сервером.

Проблема в ресурсах вашей клиентской программы / JVM или где-то в драйвере JDBC EDB. Если вы не можете найти что-то неправильное в вашей JVM, и поскольку вы используете PostgreSQL Plus Advanced Server, я бы посоветовал вам использовать поддержку EnterpriseDB для помощи с их драйвером JDBC. (Что отличается от PostgreSQL)

0 голосов
/ 17 апреля 2015

Похоже, что это проблема Windows на стороне клиента, а не проблема кода.Пожалуйста, обратитесь к моему ответу на аналогичный вопрос по stackoverflow

...