【问题标题】:JVM Datasource tuning idle database connection in the connection pool for tomEEJVM Datasource 为 tomEE 调整连接池中的空闲数据库连接
【发布时间】:2015-10-04 22:18:37
【问题描述】:

我想弄清楚我的数据源定义是否是我们遇到问题的根本原因。我们在 AWS 中的应用程序堆栈有几台 TomEE 机器在 ELB 后面一起运行。随机保留与数据库的空闲连接且不终止的机器。

我想知道我们可以做些什么来更好地设置我们的连接和获取连接。我们的应用程序确实有中等数量的请求/秒。

这是我们的 Tomee.xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<!-- see http://tomee.apache.org/containers-and-resources.html -->
<!-- Datasources for Prod -->   
   <Resource id="DBWPC" type="javax.sql.DataSource">
      DataSourceCreator tomcat
      JdbcDriver oracle.jdbc.OracleDriver
      JdbcUrl jdbc:oracle:thin:@x.x.com:1521:service
      UserName xxxxx   
      Password xxxx
      jmxEnabled true
      InitialSize 5
      MaxActive 20
      MaxIdle 20
      MinIdle 0
      MaxWait -1
      ValidationQuery SELECT 1 FROM DUAL
      PoolPreparedStatements true
      MaxOpenPreparedStatements 0
      TestWhileIdle true
      timeBetweenEvictionRunsMillis 180000
      JtaManaged true      
   </Resource>
 <!-- Standard JMS Setup for NON-SERVER **** START **** -->
 <Resource id="PrimaryJMSRA" type="ActiveMQResourceAdapter">
            BrokerXmlConfig=
          ServerUrl = tcp://x.x.com:61616
  </Resource>
  <Resource id="JmsConnectionFactory" type="javax.jms.ConnectionFactory">
            ResourceAdapter = PrimaryJMSRA
    </Resource>
 <Container id="JmsMdbContainer" ctype="MESSAGE">
    ResourceAdapter = PrimaryJMSRA
</Container>
<Container id="wpcStatelessContainer" type="STATELESS">
 accessTimeout = 30 seconds
 callbackThreads = 5
 closeTimeout = 5 minutes
 garbageCollection = false
 idleTimeout = 0 minutes
 maxAge = 0 hours
 maxAgeOffset = -1
 maxSize = 5000
 minSize = 20
 replaceAged = true
 replaceFlushed = false
 strictPooling = false
 sweepInterval = 5 minutes
 </Container>
 <Container id="wpcSingletonContainer" type="SINGLETON">
    accessTimeout = 30 seconds
</Container>

【问题讨论】:

  • 我应该补充一点,它在数据库中导致的问题是阻止其他 SID 的会话。我们的实例是我们有超过 200 个会话被空闲 SID 阻止,导致我们的应用程序停止响应。就像 JVM 不会为另一个请求提供服务,因为我想它会无限期地等待。

标签: oracle tomcat jvm datasource apache-tomee


【解决方案1】:

优化取决于很多可能的工作负载,因此这可能不是最终答案,而是一种尝试。新会话被阻止/排队表明您没有足够的空间来汇集您的连接。如果您在开始时看到要创建很多连接,则将您的 InitialSize 从 5 增加到大概 20。由于您说 200 个会话,假设您有很多并发会话,建议将您的最大活动设置为 100 或 150被容纳。

尝试下面的示例设置(考虑到您需要高并发),如果有帮助,请告诉我:

  • testWhileIdle="true"
  • testOnBorrow="true"
  • testOnReturn="false"
  • validationQuery="SELECT 1"
  • validationInterval="30000"
  • timeBetweenEvictionRunsMillis="5000"
  • maxActive="100"
  • minIdle="10"
  • maxIdle="20"
  • maxWait="10000"
  • initialSize="20"
  • removeAbandonedTimeout="60"
  • removeAbandoned="true"
  • logAbandoned="true"
  • minEvictableIdleTimeMillis="30000"

为什么我建议这些设置?检查下面的链接: http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-04
    • 2016-07-11
    • 2011-11-13
    • 1970-01-01
    • 2015-07-13
    • 2014-04-09
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多