2015-10-04 2 views
0

Я пытаюсь выяснить, является ли определение Datasource первопричиной проблемы, которую мы имеем. Наш стек приложений в AWS имеет несколько машин TomEE, работающих вместе и ELB. Случайно машины с сохранением простоя подключений к базе данных и не заканчиваются.Настройка JVM Datasource для подключения базы данных в пуле соединений для 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 сеансов, заблокированных незанятыми идентификаторами безопасности, заставляя наше приложение перестать отвечать на запросы. Подобно JVM, он не будет обслуживать другой запрос, потому что он ждет бесконечно долгое время. – user3137487

ответ

0

Оптимизация зависит от многих возможных нагрузок и, следовательно, это не может быть окончательным ответом, но попытка. Новые сеансы заблокированы/поставлены в очередь, что у вас недостаточно места для объединения ваших соединений. Если вы видите, что в начале будет создано множество подключений, увеличьте значение InitialSize с 5 до 20. Поскольку вы сказали 200 сеансов, рекомендуется установить максимальную активность до 100 или 150 при условии, что у вас много параллельных сеансов для размещения.

настройки Try образец ниже (с учетом требуется высокая параллельность) и дайте мне знать, если это поможет:

  • 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