JVM数据源调整连接池中的空闲数据库连接以供tomEE使用

时间:2015-10-04 22:18:37

标签: oracle tomcat jvm datasource tomee

我想弄清楚我的数据源定义是否是我们遇到的问题的根本原因。我们在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>

1 个答案:

答案 0 :(得分:0)

优化取决于许多可能的工作负载,因此这可能不是最终答案,而是尝试。阻止/排队的新会话表示您没有足够的空间来连接您的连接。如果您在开始时看到要创建的很多连接,那么将InitialSize从5增加到可能为20.因为您说过200个会话,所以建议将最大活动时间设置为100或150,假设您有大量并发会话适应。

尝试下面的示例设置(考虑到您需要高并发性)并告诉我它是否有帮助:

  • testWhileIdle = “真”
  • testOnBorrow = “真”
  • testOnReturn = “假”
  • validationQuery =“SELECT 1”
  • validationInterval = “30000”
  • timeBetweenEvictionRunsMillis = “5000”
  • maxActive = “100”
  • minIdle = “10”
  • 了maxidle = “20”
  • MAXWAIT = “10000”
  • INITIALSIZE = “20”
  • removeAbandonedTimeout = “60”
  • removeAbandoned = “真”
  • logAbandoned = “真”
  • minEvictableIdleTimeMillis = “30000”

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