gpt4 book ai didi

tomcat - Apache Commons DBCP 奇怪的行为

转载 作者:行者123 更新时间:2023-11-28 21:53:40 25 4
gpt4 key购买 nike

我试图找出我们在使用 Tomcat 6.0.37 和 MySQL 5.5 的高流量站点中遇到的问题。测试负载是 200 个到 Tomcat 的并发连接——所有连接到同一个 URL,并且所有连接都访问数据库。

为了进行连接池,我们使用了嵌入式 tomcat-dbcp 包。这是我们使用的资源配置:

    <Resource name="jdbc/appDataSource" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/myapp?autoReconnect=true&amp;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"
/>

当我在该站点上运行一些测试流量时,我发现连接池大量丢失连接。大约一分钟后,我对 MySQL 进行了超过 10000 次连接尝试,而池中的连接从未超过 20 个 - 所有连接几乎都立即关闭。

我尝试通过将其添加到 lib 文件夹并包含属性来切换到 Apache Commons

            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&amp;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 是否真的有问题,即使在最简单的情况下它也不起作用?这一切有解释吗?

最佳答案

对于重负载(多线程)的系统,DBCP 被认为已过时且不是生产级,建议使用 C3P0 而不是 DBCP。

C3P0 是一个易于使用的库,用于通过使用 jdbc3 规范定义的功能和 jdbc2 的可选扩展来增强传统 JDBC 驱动程序,从而使它们“企业就绪”。

似乎 Tomcat 7 附带了一个新的连接池作为一个新特性;它是 commons-dbcp 连接池的替代品。虽然 commons-dbcp 连接池适用于小型或低流量应用程序,但众所周知,它在高并发环境(想想多核/多 CPU)中会出现问题。

请引用 Connection pooling options with JDBC: DBCP vs C3P0有关 DBCP 与 C3P0 的更多详细信息。

关于tomcat - Apache Commons DBCP 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17759174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com