C3P0 Создание слишком большого количества потоков и таймеров - PullRequest
4 голосов
/ 11 июля 2011

У меня есть веб-приложение на Java, работающее на Tomcat, с Hibernate и C3P0. Все классы сущностей и контроллеры JPA были созданы с помощью Netbeans Wizzard. Существует сервлет, который при вызове вставляет много объектов в базу данных (используя контроллеры JPA).

Проблема в том, что, глядя на мое веб-приложение с Java VisualVM, я обнаружил, что существует много классов Timers и com.mchange.v2.async.ThreadPoolAsynchronousRunner, и они растут с течением времени. Для каждого таймера создано 3 темы.

Все Потоки и Таймеры находятся в состоянии WAIT, и я думаю, что эта проблема может быть вызвана ошибкой OutOfMemory (Java Heap Space), что приложение. производит. И хотя я вижу в MySQL Administrator, что все соединения закрываются, когда сервлет завершает задачу, возможно, некоторые объекты все еще находятся в памяти.

Это нормально, что C3P0 создает листья более 700 таймрасов и 2100 потоков в состоянии "WAIT"?

Спасибо

Эзекуэль

1 Ответ

0 голосов
/ 14 июля 2011

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

То же самое случилось со мной однажды (случайно). Хотя я не столкнулся с OutOfMemory, но достиг максимального ограничения соединения на сервере базы данных.

...