performance - 将 DBCP 替换为 Tomcat JDBC 池时增加负载并降低性能

标签 performance tomcat load apache-commons-dbcp jdbc-pool

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

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

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

<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 中我只有:

  <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 更快。

最佳答案

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

我会开始调音

maxActive

匹配您的 maxThreads 以处理并发。

关于performance - 将 DBCP 替换为 Tomcat JDBC 池时增加负载并降低性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741203/

相关文章:

python: split() 效率 vs 字符抓取方法

c# - 如何有效地从八叉树/四叉树中获取结果?

java - Eclipse 不断将我的 Web 项目重新部署到 tomcat

tomcat - 如何将 Tomcat webapp 转换为 Oracle 应用服务器 webapp?

linux - linux 负载计算中的权重是如何选择的?

performance - 如何为我的特定项目优化 IntelliJ IDEA?

c - 在 C 中优化搜索算法

mysql - 将表转储加载到数据库中的最简单方法

tomcat - 打开 Worklight 应用程序中心时出错

c++ - 如何根据文本文件在 C 和 C++ 中的启动方式仅加载某些行?