Tomcat的连接池只打开20个到mysql的连接

Tomcat的连接池只打开20个到mysql的连接

我有一个 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 中,“显示变量”告诉我 max_connections 是 151。

仍然,

use information_schema;
select count(*) from processlist where User = 'user';

永远不会显示超过 20 个连接。在 tomcat 的 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)

我应该检查什么来发现问题?

答案1

并检查应用程序是否正确关闭连接,这是程序员要做的事情,但仍然是一个常见的错误。

答案2

我不确定这是否是 Tomcat 的问题,请检查 MySQL 是否限制了连接数。

答案3

还要检查 MySQL 的 max_user_connections 变量。

相关内容