我想弄清楚我的数据源定义是否是我们遇到的问题的根本原因。我们在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>
答案 0 :(得分:0)
优化取决于许多可能的工作负载,因此这可能不是最终答案,而是尝试。阻止/排队的新会话表示您没有足够的空间来连接您的连接。如果您在开始时看到要创建的很多连接,那么将InitialSize从5增加到可能为20.因为您说过200个会话,所以建议将最大活动时间设置为100或150,假设您有大量并发会话适应。
尝试下面的示例设置(考虑到您需要高并发性)并告诉我它是否有帮助:
为什么我建议这些设置?检查以下链接: http://www.tomcatexpert.com/blog/2010/04/01/configuring-jdbc-pool-high-concurrency