【发布时间】:2015-10-04 22:18:37
【问题描述】:
我想弄清楚我的数据源定义是否是我们遇到问题的根本原因。我们在 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>
【问题讨论】:
-
我应该补充一点,它在数据库中导致的问题是阻止其他 SID 的会话。我们的实例是我们有超过 200 个会话被空闲 SID 阻止,导致我们的应用程序停止响应。就像 JVM 不会为另一个请求提供服务,因为我想它会无限期地等待。
标签: oracle tomcat jvm datasource apache-tomee