我正在解决一个与Tomcat 6.0.37和MySQL 5.5相关的高流量网站问题。测试负载为200个并发连接到Tomcat,所有连接都指向相同的URL并且都会访问数据库。
我们使用内嵌的tomcat-dbcp包进行连接池。以下是我们使用的资源配置:
当我在该网站上运行一些测试流量时,我发现连接池会失去连接。大约一分钟后,我已经尝试了超过10000次连接MySQL,而且连接池从未保持超过20个连接 - 所有这些连接几乎立即关闭。
我尝试切换到Apache Commons,将其添加到lib文件夹中并包含属性。
我们使用内嵌的tomcat-dbcp包进行连接池。以下是我们使用的资源配置:
<Resource name="jdbc/appDataSource" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/myapp?autoReconnect=true&characterEncoding=UTF-8"
username="root"
password="*****"
testOnBorrow="true"
maxWait="5000"
maxIdle="1"
maxActive="30"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
logAbandoned="true"
removeAbandoned="true"
removeAbandonedTimeout="60"
/>
当我在该网站上运行一些测试流量时,我发现连接池会失去连接。大约一分钟后,我已经尝试了超过10000次连接MySQL,而且连接池从未保持超过20个连接 - 所有这些连接几乎立即关闭。
我尝试切换到Apache Commons,将其添加到lib文件夹中并包含属性。
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
我曾使用自己的配置,但结果与之前没有任何区别。
我尝试了切换到C3P0和BoneCP,它们工作得很好,我看到最多可以保持30个连接-MySQL上没有新建或丢失的连接
我也尝试过使用Apache Tomcat 7的连接池(仅为了测试),并且以下配置也很好用:
<Resource name="jdbc/appDataSource" auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/myapp?autoReconnect=true&characterEncoding=UTF-8"
username="root"
password="******"
maxIdle="1"
maxActive="30"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
logAbandoned="true"
removeAbandoned="true"
removeAbandonedTimeout="60"
/>
我想知道Apache Commons DBCP是否有什么严重的问题,以至于它甚至在最简单的情况下都不能正常工作?这一切是否有解释?