2015-10-04 71 views
0

我想弄清楚我的数据源定义是否是我们遇到问题的根本原因。我们在AWS的应用程序堆栈中有几台TomEE机器和ELB。随机保留与数据库的空闲连接并不终止。JVM数据源调整tomEE连接池中的空闲数据库连接

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

这是我们的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> 

+0

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

回答

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