(JPA/Toplink) Сетевая ошибка IOException: Адрес, уже используемый: подключение

У меня есть проект JPA, который раньше работал. В этом месяце я добавил некоторые данные в своей базе данных. Когда я выполняю обычное задание (я раньше работал на предыдущих месяцах), я получаю эту ошибку:

Исключение [TOPLINK-4002] (Основы Oracle TopLink - 2.0.1 (Создают b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions. Внутренняя исключительная ситуация DatabaseException: java.sql. SQLException: Сетевая ошибка IOException: Адрес, уже используемый: Код ошибки подключения: 0

Я проверил свой LocalPersistenceFacade, содержащий большинство методов, которые я называю путем печати счетчика, и я получаю точное количество закрытых и открытых связей там: 457. И затем мои катастрофические отказы задания. Обычно, Это должно пойти до 601 а не 457.

На стороне базы данных нет никакой информации, связанной с возможным катастрофическим отказом. Все, кажется, корректно, но в моем коде Java говорится что-то еще.

У кого-то была какая-либо идея?

С уважением, Jean

5
задан Pascal Thivent 25 April 2010 в 20:33
поделиться

1 ответ

Насколько я понимаю, вы открываете / закрываете соединение для каждой строки, и проблема, с которой вы сталкиваетесь, выглядит как описанная в на этой странице :

Возможные причины

При запуске большого объема данные через карты, которые имеют несколько функций . Windows не закрывает соединения достаточно быстро, что вызывает исключение сетевого ввода-вывода.

Рекомендации

Измените следующие два значения в реестре Windows:

Это значение изменяет диапазон портов , которые Windows использует для открытия соединений. Автор по умолчанию он разрешает только порт 5000 . Изменив это значение, Windows сможет открыть больше портов , прежде чем потребуется повторно использовать порт начало. Каждое соединение использует порт , поэтому оно начинается с 1025 и поднимается до этого значения . Когда он достигает максимального значения , он возвращается к 1025 и пытается снова открыть этот порт.

Системный ключ:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters
Имя: MaxUserPort Тип: REG_DWORD
Значение: 5000 -65534

Это позволит «освободить» закрытые порты быстрее. По умолчанию Windows оставляет порт в состоянии TIME_WAIT на 240 секунд. Это может вызвать проблемы, если для параметра MaxPort установлено значение, при котором новое соединение будет использовать "более старый" порт , который не был удален из состояния TIME_WAIT пока что. Уменьшая это значение, вы ускоряете освобождение соединений .

Системный ключ:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters
Имя значения: TcpTimedWaitDelay Data
Тип: Значение REG_DWORD Данные: 30-300

Симптомы и введенное изменение - больше строк - полностью совпадают. Однако, хотя предлагаемая «рекомендация» может решить проблему, я рекомендую использовать пул соединений (используйте автономный пул соединений, например c3p0 или DBCP ). Это решит проблему и повысит производительность.

5
ответ дан 14 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: