Проблема с подключением к Java и MySql - PullRequest
1 голос
/ 17 мая 2011

Я использую Java + MySql. Я пытаюсь добавить объемные данные (около 40 миллионов записей). Мое приложение отлично работает на пару сотен тысяч записей, но после этого оно начинает выдавать мне следующее исключение:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at net.jboss.Database.DatabaseConnection.getConnection(DatabaseConnection.java:48)
    at net.jboss.emp.idm.adta(mde.java:96)
    at net.jboss.emp.idm.main(mde.java:69)
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.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
    ... 16 more

Я погуглил эту проблему и перепробовал почти все варианты (обновление реестра Windows, изменение файла my.cnf, изменение глобальных параметров mysql и т. Д.), Но он не работает.

Ответы [ 5 ]

2 голосов
/ 07 августа 2012

Я столкнулся с подобной проблемой пару часов назад.С настройками по умолчанию я мог написать около 15K записей за одну транзакцию.Попытка написать больше, чем это, дала мне точно такое же сообщение («Нет доступного места в буфере (максимальное количество подключений достигнуто?): Соединение»).

Затем я разбил транзакции на блоки по 1000 записей (мое приложениетребования учитывали это), и я все еще получил сообщение после 15-ой итерации.Мое приложение старательно создавало новый EntityManager и закрывало его для каждой итерации.

Решением было очистить кэш для этого конкретного типа объекта между итерациями (вы также можете очистить кэш по объекту).

EntityManagerFactory.getCache (). EvictAll или evict (...)

1 голос
/ 17 мая 2011

Кажется, соединение не закрывается должным образом.Я бы рекомендовал вам использовать c onnection-pooling

Также см.

0 голосов
/ 03 апреля 2017

У меня была точно такая же проблема, и я исправлял ее с помощью оператора connectionname.close(); после каждого вызова исполняемого оператора.

0 голосов
/ 19 мая 2011

это может быть либо потеря соединения с mysql, либо ваш код не сможет закрыть существующее соединение, как вы сказали, оно работает для запуска некоторых записей.поэтому увеличьте максимальное соединение с MySQL или попробуйте проверить с другой программой, когда вы получите это сообщение об ошибке, если MySQL принимает соединение с другой программой.

0 голосов
/ 17 мая 2011

это может решить вашу проблему сейчас :) CommunicationsException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...