Есть ли способ освободить насыщенный пул соединений? - PullRequest
3 голосов
/ 03 мая 2009

Я работаю с open esb на сервере glassfish. У нас есть пул соединений, который работает с базой данных as400.

Каждую пару дней мы получаем эту ошибку: Ошибка в выделении соединения. Причина: используемые соединения равны макс. размер пула и время ожидания истекло. Невозможно выделить больше соединений

Лучший способ избавиться от cp - перезапустить сервер. Нам также удалось установить другой cp с такими же атрибутами.

Мои вопросы: Есть ли способ активно "сказать" cp освободить все открытые соединения?

Ура, Эран

Ответы [ 4 ]

5 голосов
/ 03 мая 2009

Прежде чем сделать это, выясните, почему соединения не освобождаются должным образом. Похоже, есть одно место, где это забыто (у вас есть все close () в предложениях finally?).

Я настоятельно рекомендую Майклу Найгарду "Release It!" для методов, чтобы сделать производство программного обеспечения готовым.

РЕДАКТИРОВАТЬ # 1: Если я правильно понимаю ваше описание, ваши бэкэнд-программы идут в MSGW в QSYSOPR, что приводит к зависанию соединения, пока не будет дан ответ, который в вашем случае близок к никогда. Можно ли использовать профиль с ответом по умолчанию «C», который позволяет распространять ошибку как исключение?

В противном случае вы можете установить период ожидания для подключений или для всего сервера в 24 часа? Тогда, по крайней мере, соединения в конечном итоге будут закрыты. Это решение не масштабируется, но может облегчить разработку.

Обратите внимание, также возможно иметь отдельный поток наблюдения, который регулярно ищет MSGW и автоматически отправляет им ответ ПОСЛЕ захвата стека обратного вызова для посмертного анализа.

1 голос
/ 27 сентября 2010

У меня была эта проблема, и это оказалось Управление транзакциями. Добавление @TransactionManagement (TransactionManagementType.BEAN) к классу решило проблему. В моем случае я не хотел иметь код транзакции, но ваш пробег может варьироваться в зависимости от ваших требований.

1 голос
/ 03 мая 2009

Если вы можете определить верхнюю границу для «нормального» использования соединения в считанные секунды, вы можете использовать механизм обнаружения утечки соединения GlassFish. В консоли администратора GF (я использую v2.1) перейдите в раздел Ресурсы / JDBC / Пулы подключений / [ваш cp] / Дополнительно и в разделе «Параметры подключения» установите для параметра «Утверждение утечки» значение true и установите время в секундах для времени ожидания утечки.

0 голосов
/ 08 мая 2009

Вы упомянули в своем комментарии к Андерсену, что вы получаете сообщения AS400. Вы можете настроить автоматические ответы на эти сообщения, чтобы не оставлять сообщение об исключении открытым. Проверьте команду WRKRPYLE (запись рабочего списка ответов) на AS400, чтобы автоматически ответить на эти ошибки и избежать зависания.

...