Я запускаю веб-приложение на Java с использованием Tomcat (версия 8.0.43).
Я переместил tomcat-dbcp.jar (который поставляется с Tomcat8.0.43) в jdk/jre/lib/ext
, чтобы он был доступен для jre.
Я думаю, что я использую Tomcat DBCP (в отличие от Apache Commons DBCP), но, как я понимаю из документации , параметры конфигурации такие же, как для Apache Commons DBCP, которые подробно описаны здесь .
Соответственно, я настроил следующий элемент Resource
для пула соединений в context.xml
:
<Resource
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
logAbandoned="false"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
name="jdbc/[dbName]"
password="${dbPassword}"
removeAbandonedOnBorrow="true"
removeAbandonedTimeout="60"
type="javax.sql.DataSource"
url="[dbUrl]autoReconnect=true"
username="${dbUsername}"
testWhileIdle="true"
testOnBorrow="true"
validationQuery="SELECT 1 AS dbcp_connection_test"/>
В последнее время я получаю сообщение об ошибке в своих журналах:
MySQLNonTransientConnectionException: слишком много соединений
Итак, я проверил, сколько подключений у меня на момент ошибки (через Amazon CloudWatch для RDS. В частности, «ConnectionCount»), и оно может достигать 150 подключений. Как это возможно, если для моих maxTotal
подключений установлено значение 100?
Я запускаю приложение в нескольких экземплярах. Может ли быть так, что атрибут maxTotal
применяется к каждому экземпляру (например: если у меня есть Пул соединений, определенный для 2 экземпляров, то мой maxTotal = 100 + 100 = 200?)
Как будто атрибуты, которые я установил в элементе Resource
, игнорируются. Может быть, что-то не так с моей настройкой? Я не использую Tomcat DBCP, как я предполагал?
Кроме того, если я посмотрю дальше на StackTrack Exception
, который я цитировал выше, я вижу, что
org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection
называется. Я не уверен, означает ли это, что я использую пул соединений (DBCP2
), отличный от того, который я предполагал использовать (Tomcat DBCP).