我有一个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'显示variables'告诉我,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)
我应该检查什么来发现问题?
并检查应用程序是否正确closures连接,这是程序员的事情,但仍然是一个常见的错误。
我不确定这是一个Tomcat问题,请检查MySQL是否限制连接数。
还要检查MySQL的max_user_connectionsvariables。