Oracle JVM数据源调优tomEE连接池中的空闲数据库连接
我试图找出我的数据源定义是否是我们遇到的问题的根本原因。我们在AWS中的应用程序堆栈有几个TOME机器,它们在和ELB后面一起运行。具有的计算机会随机保留到数据库的空闲连接,而不会终止 我想知道我们能做些什么来更好地建立我们的联系和收获联系。我们的应用程序每秒有中等数量的请求 这是我们的Tomee.xml文件Oracle JVM数据源调优tomEE连接池中的空闲数据库连接,oracle,tomcat,jvm,datasource,apache-tomee,Oracle,Tomcat,Jvm,Datasource,Apache Tomee,我试图找出我的数据源定义是否是我们遇到的问题的根本原因。我们在AWS中的应用程序堆栈有几个TOME机器,它们在和ELB后面一起运行。具有的计算机会随机保留到数据库的空闲连接,而不会终止 我想知道我们能做些什么来更好地建立我们的联系和收获联系。我们的应用程序每秒有中等数量的请求 这是我们的Tomee.xml文件 <?xml version="1.0" encoding="UTF-8"?> <tomee> <!-- see http://tomee.apache.org
<?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>
数据源处理器tomcat
JdbcDriver oracle.jdbc.OracleDriver
JdbcUrl jdbc:oracle:thin:@x.x.com:1521:service
用户名xxxxx
密码xxxx
jmxEnabled-true
小号5
MaxActive 20
MaxIdle 20
迷你0
MaxWait-1
ValidationQuery从DUAL中选择1
PoolPreparedStatements true
MaxOpenPreparedStatements 0
TestWhileIdle-true
运行时间间隔180000
真的吗
BrokerXmlConfig=
服务器URL=tcp://x.x.com:61616
ResourceAdapter=PrimaryJMSRA
ResourceAdapter=PrimaryJMSRA
访问超时=30秒
callbackThreads=5
关闭超时=5分钟
垃圾收集=错误
idleTimeout=0分钟
最大年龄=0小时
maxAgeOffset=-1
最大尺寸=5000
minSize=20
replaceAged=true
replace=false
严格共享=错误
扫描间隔=5分钟
访问超时=30秒
优化取决于大量可能的工作负载,因此这可能不是最终答案,而是一种尝试。新会话被阻止/排队表示您没有足够的空间共享连接。如果在开始时看到很多连接需要创建,那么将InitialSize从5增加到20。既然你说的是200个会话,那么最好将maxactive设置为100或150,假设你有很多并发会话需要容纳 尝试下面的示例设置(考虑到您需要高并发性),如果有帮助,请告诉我:
- testWhileIdle=“true”
- testOnBorrow=“true”
- testOnReturn=“false”
- validationQuery=“选择1”
- validationInterval=“30000”
- timebetweenvictionrunsmillis=“5000”
- maxActive=“100”
- minIdle=“10”
- maxIdle=“20”
- maxWait=“10000”
- initialSize=“20”
- RemoveBandonedTimeout=“60”
- removeAbandoned=“true”
- log=“true”
- MinevictableItimellis=“30000”
我应该补充一点,它在数据库中造成的问题是阻塞其他SID的会话。我们有一个例子,我们有超过200个会话被空闲的SID阻塞,导致我们的应用程序停止响应。比如JVM不会为另一个请求提供服务,因为我认为它会无限期地等待。