Медленный запрос - PullRequest
       10

Медленный запрос

0 голосов
/ 22 декабря 2010

У нас есть запрос, который занимает 3 часа, чтобы закончить. Это не было проблемой раньше. Ранее код, который вызывает этот запрос, развертывается в weblogic и использует собственный менеджер пула соединений последнего.

Теперь, поскольку процесс занимает много памяти, мы извлекли этот код и заставили его работать в своем собственном пространстве кучи. Запрос на вызов запроса производится через jms. Я также заметил, что диспетчер пула соединений, который мы используем, - это dbcp, использующий настройки по умолчанию (максимальное число соединений = 8, минимальное количество соединений = 0). Клиент jms является многопоточным.

Когда мы выполнили запрос через интерфейс (TOAD), это заняло всего 2 секунды, поэтому я исключил «обвинение» базы данных.

Мне было интересно, какие шаги я мог бы предпринять, чтобы найти горлышко бутылки. Может быть что-то с пулом подключений?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2010

Вы должны использовать такой инструмент, как VisualVM или дамп потока, чтобы проверить, что делают ваши потоки.Они просто ждут завершения операции ввода-вывода?Есть какой-то плохо синхронизированный код, ожидающий намного дольше, чем нужно?Может быть, даже тупик, который останавливается после трехчасового (или трехчасового) таймаута?

1 голос
/ 22 декабря 2010

Я считаю, что всегда стоит прибегнуть к самому базовому инструменту производительности Java в вашем распоряжении: дампам потоков.Есть много способов получить дамп потока:

  • Если у вас есть консоль, используйте ctrl-break (win) или ctrl- \ (* nix)
  • jstack
  • jconsole и вкладки потоков или доступные mbeans для создания дампа

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

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

...