получение соединения от JNDI> 15 минут! - PullRequest
0 голосов
/ 02 сентября 2010

У меня странная проблема: веб-приложение подключается к серверу DB2 AS400 через JNDI, а получение соединения из JNDI длится около 930-960 секунд !!! Обычно для установления соединения требуется 4 мс, а время от времени - до 15 минут ... у него нет особого правила, когда и почему это происходит. Мы используем версию драйвера JTOpen jt400.jar 7.0.

Мы настроили его так, чтобы в пуле было не менее 20 неактивных соединений, максимальное количество соединений в пуле - 200, и мы используем 10 человек одновременно работающих над веб-приложением, поэтому вероятность использования более 10 соединения сразу ..

Ответы [ 5 ]

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

Включить статистику сбора мусора в вашем приложении.

Я предполагаю, что поиск JNDI велик и запускает сборку мусора "остановка мира", которая требует больших программ для больших пулов в небольших возрастах.

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

0 голосов
/ 22 сентября 2010

Просто прочитайте статью на похожую тему. Энтропия Java SecureRandom рассказывает о том, как реализация SecureRandom вызывала задержку приложения на 20-30 минут.Возможно, некоторые методы отладки помогут вам разобраться с этим.

0 голосов
/ 22 сентября 2010

Хм 15 минут звучит как обычное время ожидания, возможно, от неправильно настроенного DNS-сервера. Вы должны попытаться пропинговать имена хостов всех задействованных систем.

0 голосов
/ 21 сентября 2010

Я бы предложил несколько вещей, чтобы попытаться диагностировать проблему:

  1. Первое, что нужно сделать, это проконтролировать состояние пула соединений во время этого длительного поиска. Это позволит вам выяснить, есть ли проблема в фактическом поиске соединений. Независимо от того, правильно ли вы закрываете соединения или нет времени также важно. Например, вы можете открыть соединение для каждого сеанса пользователя и не закрывать его до истечения срока его действия.
  2. Проверьте настройки БД, чтобы выяснить, соответствуют ли они вашим настройкам для пула соединений.
  3. Проверьте, есть ли у вас блокировка на уровне базы данных. Это и стало причиной того, что я застрял в довольно настроенном приложении, с которым я работал раньше. Проблема заключалась в записи аудита, где пользователь, обращающийся к приложению, был зарегистрирован. Время транзакций истекло, так как каждая из них обращалась к этой записи для обновления
0 голосов
/ 21 сентября 2010

Убедитесь, что вы всегда правильно закрываете свои соединения, когда они вам больше не нужны. В противном случае вы будете продолжать выделять все больше и больше соединений, и со временем сервер DB2 перестанет давать вам больше соединений. Он подождет пару минут, пока существующее соединение прекратит работу, и выдаст его.

Чтобы увидеть, сколько у вас подключений, получите превосходный Advanced Query Tool , который имеет целый ряд представлений для мониторинга состояния вашей БД (кто подключен, что они делают, какие запросы зависают в тупиках и т. д.). Да, это стоит денег, но если это сэкономит вам один день на поиске ошибки, это уже будет стоить.

...