首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将DBCP替换为Tomcat JDBC-pool时会增加负载并降低性能

将DBCP替换为Tomcat JDBC-pool时会增加负载并降低性能
EN

Stack Overflow用户
提问于 2012-12-06 18:05:34
回答 2查看 3.2K关注 0票数 16

在DBCP中的连接泄漏和死锁问题之后,我们决定用Tomcat JDBC-pool替换它。当然,迁移非常简单。

但在将其部署到生产环境后,我注意到,运行两个Tomcat的服务器上的负载从4-4.5增加到5.5。我们什么也没做,除了换赌注。此外,使用JMeter测量的性能下降了约5%。

我花了一些时间来调整池参数,但没有明显的效果。我在下面粘贴了我当前的配置(来自server.xml中的<GlobalNamingResources> ):

代码语言:javascript
复制
<Resource name="jdbc/xxxxxx"
          auth="Container"
          type="javax.sql.DataSource"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          initialSize="10"
          maxActive="100"
          minIdle="10"
          maxIdle="50"
          maxWait="10000" 
          testOnBorrow="true"
          testOnReturn="false"
          testOnConnect="false"
          testWhileIdle="false"
          validationQuery="SELECT 1 from dual"
          validationInterval="30000"
          suspectTimeout="60"
          timeBetweenEvictionRunsMillis="30000"
          removeAbandonedTimeout="60"
          removeAbandoned="true"
          logAbandoned="true"
          abandonWhenPercentageFull="50"
          minEvictableIdleTimeMillis="60000"
          jmxEnabled="true"
          username="xxxxx"
          password="xxxxx"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:oci:xxxxx"/>

FairQueue和PoolSweeperEnabled为真

在Spring applicationContext-jdbc.xml中,我只有:

代码语言:javascript
复制
  <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="resourceRef">
      <value>true</value>
    </property>
    <property name="jndiName">
      <value>java:comp/env/jdbc/PortalDB</value>
    </property>
  </bean>

我做错了什么?我想,开箱即用的JDBC_pool应该比DBCP更快。

EN

回答 2

Stack Overflow用户

发布于 2014-02-11 04:35:49

您的设置和调整看起来是正确的。您的负载增加可能是服务器同时处理更多并发请求的结果。DBCP可能已阻止服务器承担此负载,因为它锁定了所有线程的池。jdbc-pool不能做到这一点,所以现在增加了并发性。如果负载增加,响应可能会减少,但吞吐量会增加。

我会开始调整

代码语言:javascript
复制
maxActive

匹配您的maxThreads,以便处理并发性。

票数 1
EN

Stack Overflow用户

发布于 2013-03-04 21:07:24

因此,从一种更改到另一种不应该导致任何行为或性能的变化。(参见here)

不过,可能发生变化的是您使用的版本:尤其要注意1.3/1.4的差异。(参见here)

更新库可能是在不进入调试模式的情况下解决问题的唯一方法...

更进一步,您能更具体地说明您所说的“DBCP中的连接泄漏和死锁问题”是什么意思吗?这是一个非常精确的诊断,可以确定死锁和连接池之间是否存在链接:您是如何得出这个结论的?您可能会遇到死锁,因为您的SQL语句很容易导致死锁的发生,而池只能通过同时提供多个连接才能做到这一点-这实际上只是它的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13741203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档