Tomcat: посмотрите, какие потоки используют пул соединений с базой данных

Tomcat имеет пул соединений с базой данных (DBCP) для более быстрого выполнения запросов.

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

ВОПРОС: Как узнать имя каждого потока, использующего соединение?

Предпочтительно живой JMX MBean, но приветствуются и другие советы. Отображение трассировки стека или имени класса каждого потока также приемлемо.

Примечание. Я не ищу MBean, показывающий настройки DBCP. Я хочу посмотреть, что использует каждое соединение.


person Nicolas Raoul    schedule 09.07.2012    source источник


Ответы (2)


Подсказанный ответом Кристофера, я создал инструмент для мониторинга заимствованных/освобожденных соединений:

https://github.com/nicolas-raoul/Commons-DBCP-monitoring

Он отслеживает использование Commons DBCP и позволяет создавать такие графики:

введите здесь описание изображения

введите здесь описание изображения

Это позволяет очень легко определить, какие потоки удерживают соединения в течение длительного времени.

person Nicolas Raoul    schedule 06.08.2012
comment
Не могли бы вы рассмотреть возможность рефакторинга своего решения, чтобы сам пул можно было запрашивать, а не записывать в stdout? Если вы это сделаете, вы можете пожертвовать его обратно проекту Tomcat и внести свое имя в список изменений. - person Christopher Schultz; 04.01.2017

К сожалению, такой фасоли не существует.

Что вы можете сделать, так это включить параметр logAbandoned в конфигурации DBCP. Посмотрите документацию для Apache Commons-DBCP ( http://commons.apache.org/dbcp/configuration.html) для получения подробной информации: вы можете использовать все параметры конфигурации в своем элементе <Resource> в Tomcat.

logAbandoned сообщит вам, где было извлечено соединение из пула, которое не было своевременно возвращено. Это может указывать на утечку соединения или просто длительные запросы.

ОБНОВЛЕНИЕ 2015-12-15

С помощью tomcat-pool Tomcat вы можете присоединять перехватчики, такие как SlowQueryReport или, чтобы получать уведомления через JMX, SlowQueryReportJmx

Эти инструменты могут работать лучше, чем более базовая информация, которую вы можете получить от Apache Commons-DBCP.

person Christopher Schultz    schedule 09.07.2012
comment
+1 Спасибо за подсказку! Я создал инструмент, основанный на этой идее, смотрите мой ответ. - person Nicolas Raoul; 06.08.2012