2015-10-04 70 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