Документация Hibernate описывает, как в Hibernate устанавливаются пулы соединений:
Hibernate will obtain and pool connections using java.sql.DriverManager if you set the following properties:
Table 3.1. Hibernate JDBC Properties
Property name Purpose
hibernate.connection.driver_class JDBC driver class
hibernate.connection.url JDBC URL
hibernate.connection.username database user
hibernate.connection.password database user password
hibernate.connection.pool_size maximum number of pooled connections
и, что более важно:
Собственный пул соединений Hibernate
алгоритм, однако, довольно
в зачаточном состоянии. предназначен для помощи
вы начали и не предназначены
для использования в производственной системе, или
даже для тестирования производительности.
Стоит проверить, используются ли значения, описанные в документации, что приведет к тому, что Hibernate будет управлять пулом без делегирования управления пулом реализации готового пула соединений.
Что касается вывода команды netstat, то число соединений и причина их открытия являются наиболее важными критериями для решения проблемы. Обычно готовые к реализации реализации пула открывают соединения только при необходимости и также могут уменьшать размеры пула. Кроме того, такой менеджер пула может прервать соединения, если они не используются. Может показаться, что из числа соединений, которые находятся в состоянии TIME_WAIT, сервер ожидает трафика от клиента; это может быть в случае физического сброса соединения после того, как он больше не требуется.
Все вышеперечисленные наблюдения имеют только одно результирующее предложение - использовать реализацию пула соединений, которая лучше, чем установка по умолчанию, и характеристики производительности которой также хорошо понятны. Вы получите предложения по использованию c3p0 или BoneCP , от множества людей здесь.
Обновление
На основании опубликованной конфигурации Spring Hibernate представляется, что источник данных используется для получения соединений для Hibernate . Следовательно, будет использоваться конфигурация базового пула соединений за источником данных.
Обновление № 2
Обновленный файл контекста приложения Spring использует DriverManagerDataSource из среды Spring. Изложение объявления дословно из документации:
ПРИМЕЧАНИЕ. Этот класс не является
пул соединений; это на самом деле не
Подключения к бассейну. Он просто служит
простая замена для полноценного
пул соединений, реализующий то же самое
стандартный интерфейс, но создание нового
Соединения при каждом звонке.
Важно отметить, что DriverManagerDataSource использует предоставленные ему свойства для создания соединения. И как указано в документации, для создания соединений будет использоваться DriverManager вместо JNDI-связанного источника данных. Важным моментом здесь является то, что DriverManager обычно возвращает физические соединения с базой данных, в отличие от источников данных, которые возвращают обертки логических соединений. Из вывода netstat выясняется, что эти физические соединения не закрываются. Возможно, Hibernate не закрывает соединения; но это маловероятно; вам лучше использовать более эффективную реализацию пула соединений, которую можно настроить так, чтобы иметь фактический пул объектов соединений, которые никогда не превышают размер пула.