У меня есть приложение Java со следующей строкой в context.xml
<Resource
driverClassName="com.mysql.jdbc.Driver"
maxActive="100"
maxIdle="30"
initialSize="10"
maxWait="7000"
name="jdbc/app"
password="pass"
type="javax.sql.DataSource"
url="jdbc:mysql://dbhost:3306/dbname?autoReconnect=true"
username="user"
validationQuery="SELECT 1"
removeAbandoned="true"
removeAbandonedTimeout="30"
logAbandoned="true"
/>
В mysql 'show variables' сообщает мне, что max_connections равно 151.
По-прежнему,
use information_schema;
select count(*) from processlist where User = 'user';
никогда не показывает мне больше 20 подключений. На catalina.out -log кота я получаю
Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:103)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
Что мне нужно проверить, чтобы найти проблему?
И проверьте, правильно ли приложение закрывает соединения, это то, что должны делать программисты, но все же распространенная ошибка.
Также проверьте переменную MySQL max_user_connections.
Я не уверен, что это проблема Tomcat, проверьте, не ограничивает ли MySQL количество подключений.