В чем разница между maxActive и maxIdle для пулов соединений Tomcat?
пул соединений tomcat имеет параметр maxActive и параметр maxIdle мои вопросы.
- в чем разница между этими двумя параметрами?
- что такое сценарий реального мира, где вы можете иметь другое значение для maxActive, чем для maxIdle?
по какой-то причине документы не имеют смысла для меня. maxActive и maxIdle существуют как в dbcp apache, так и в JDBC-пуле tomact 7 согласно документам на http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
maxActive (int) максимальное количество активных соединений, которые могут быть выделено из этого пула одновременно. Значение по умолчанию-100
maxIdle (int) максимальное количество соединений, которые должны быть сохранены в бассейне все время. Значение по умолчанию maxActive: 100 Idle соединения проверяются периодически (если включено) и соединения, которые бездействовал дольше minEvictableIdleTimeMillis выйдет. (Также см. testWhileIdle)
3 ответов
maxActive прямо вперед. maxIdle можно объяснить таким образом-скажем, у вас есть 100 активных соединений max и, скажем, вы установили maxIdle на 80. Предполагая, что в базу данных нет запросов, будут протестированы только 80 соединений (через validationquery) и останутся активными. Остальные 20 будут закрыты. Поэтому в любой момент Вы можете иметь только 80 неактивных соединений.
Возможно, вы захотите установить другой номер, чтобы предотвратить дополнительные (ненужные) соединения, выходящие на база данных. Потому что каждое соединение, обслуживаемое базой данных, потребляет ресурсы (например, память).
Но, предполагая, что вы установили maxActive размер 100 и все 100 используются почти все время, эта настройка, очевидно, не имеет значения.
maxActive
the maximum number of active connections that can be allocated from this pool at the same time.
этот атрибут используется для ограничения количества соединений, которые могут быть открыты пулом.
maxIdle
(int) The maximum number of connections that should be kept in the pool **at all times.**
это для ограничения простоя соединений. Соединения (не больше значения maxIdle) не будут освобождены, так что следующий запрос на соединения будет намного быстрее.
Итак, в слове, maxActive-ограничить максимальное число подключений.
но простоя(maxIdle
или minIdle
) для исполнения проблема (время обмена с пространством / ресурсами), среди которых maxIdle должен ограничить максимальные соединения(ресурсы), с которыми вы собираетесь обмениваться временем.
в небольших средах подключения к базам данных не являются проблемой, потому что их не так много, а ресурсы сервера почти не повреждены. В больших средах количество подключений к базе данных потребляет много ресурсов, поэтому вам нужно оптимизировать способ управления подключениями к базе данных, используя меньшее возможное количество подключений, что даст вам лучшую производительность. На этом этапе maxActive устанавливает максимальное количество подключений, которые могут быть сделаны к базе данных пул, ограничивающий ресурсы, назначенные инициатору запроса. С maxIdle вы указываете, что, если соединение "простаивает", оно будет закрыто, если нет минимальных соединений "maxIdle". Почему не менее maxIdle?, потому что вам нужны некоторые соединения, готовые для следующих запросов к базе данных, поэтому вам не нужно открывать и закрывать снова так много соединений, если пул должен быть заполнен, поэтому вы освобождаете много ресурсов.