- 浏览: 35146 次
- 性别:
- 来自: 北京
最新评论
WLS_040:常见故障之八:JDBC Connection Pools
- 博客分类:
- WEBLOGIC
声明:该博文转自http://maping930883.blogspot.com,热爱java,热爱生活
WebLogic Server中,数据库连接池是一个经常出问题的地方。下面就总结一下出问题的原因和解决办法。
1.数据库连接泄漏
此类问题一般都是由于开发人员没有正确关闭数据库连接造成的。比如,使用完Connection后,没有调用Connection.close()方法。
1.1. 诊断方法
在Console中,找到Connection Pools Tab 和Diagnostics,设置以下属性(不同版本可能略有区别)
Enable Connection Leak Profiling 启用连接池泄漏的监控。
Enable Connection Profiling 启用连接池监控。
Inactive Connection Timeout 100 表示100秒后强制回收无效连接。默认0,表示使用完才释放回连接池。
无需重启,查看server的log,查找“A JDBC pool connection leak was detected”,如果有,看看是哪个类引起的。
下面是一个数据库连接泄漏的例子:
A JDBC pool connection leak was detected.
A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool.
The following stack trace at create shows where the leaked connection was created.
Stack trace at connection create:
at weblogic.jdbc.wrapper.JTAConnection.init(JTAConnection.java:90)
at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:468)
at weblogic.jdbc.jta.DataSource.connect(DataSource.java:410)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:344)
at troubleshooting.servlets.JdbcConnections.service(JdbcConnections.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
问题解决后,把三个属性设置回先前的值。
1.2. 解决方法
正确的关闭数据库连接。具体代码如下:
Connection conn = null;
ResultSet rs = null;
preparedStatement pss = null;
try {
conn = dataSource.getConnection(USERID,pASSWORD);
pss = conn.prepareStatement("SELECT SAVESERIALZEDDATA FROM SESSION.pINGSESSION3DATA WHERE SESSIONKEY = ?");
pss.setString(1,sessionKey);
rs = pss.executeQuery();
pss.close();
} catch (Throwable t) {
// 错误处理
} finally {
try {
if (conn != null) conn.close();
} catch (Exception e){}
}
2.数据库连接不够用
导致数据库连接不够用的原因主要有:
(1)某些程序占用connection时间过长,如果多个用户同时使用这些程序,则会导致连接不够用。
(2)线程死锁,无法释放connection。
2.1. 诊断方法
(1)监控参数:Waiting For Connection High Count
[domain_name]-> Enviroment -> Servers -> [Server] -> Monitoring -> JDBC查看参数:Waiting For Connection High Count
如果没有此参数,手工添加进来,该参数表示在没有可用连接的情况下,应用程序等待连接的最大个数。
调整后的连接池最大值 = 调整前的连接池最大值 + Waiting For Connection High Count。
一般来说,数据库连接池的大小与最佳并发用户数相当。
(2)在Server Log中,明确抛出下列异常:
java.sql.SQLException: Internal error: Cannot obtain XAConnection weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool BankConnectionPool to allocate to applications, please increase the size of the pool and retry..
at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1493)
at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:455)
at weblogic.jdbc.jta.DataSource.connect(DataSource.java:410)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:344)
at troubleshooting.servlets.JdbcConnections.service(JdbcConnections.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
如果此时观察connection的监控,会发现所有connection 都是Active,而且还有大量请求等待connection。
2.2. 解决方法
(1)提高Maximum Capacity数量,该值一般略大于峰值情况下的数据库连接数。
Services > JDBC > Connection Pools > BankConnectionPool > Configuration > Connections
(2)重点检查synchronize代码段和涉及数据库锁的代码。如果有必要,可以查看thread dump,看看线程在忙什么和等什么。
3.数据库连接使用超时
此类问题一般是由于某些数据库操作时间比较长,超过了Inactive connection timeout的设置。
3.1. 诊断方法
在Server Log中,明确有下列提示,并且在提示后抛出应用异常:
Forcibly releasing inactive resource "weblogic.jdbc.common.internal.ConnectionEnv@132967d" back into the pool "BankConnectionPool".
这里无法列出应用异常,因为每个应用都不一样,不过很有可能会抛出空指针异常,因为Connection被强制放回池中了,继续使用一个空对象会抛出该异常。
3.2. 解决方法
在高级参数中,提高Inactive connection timeout数量。
Services > JDBC > Connection Pools > BankConnectionPool > Configuration > Connections
4.事务超时
此类问题一般是由于某些数据库操作时间比较长,超过了JTA Timeout Seconds的设置。
4.1. 诊断方法
在Server Log中,明确抛出异常:
weblogic.transaction.internal.TimedOutException: Transaction timed out after 300 seconds
4.2. 解决方法
提高Services > JTA Configuration > Timeout Seconds数量。
注意,这个参数应该小于Inactive connection timeout的值,因为事务必须在连接超时前完成。
如果想分析究竟是哪些SQL语句导致事务超时,可以打开日志AdminServer > Logging > JDBC,选中Enable JDBC Logging,并设置JDBC Log File Name。
WebLogic Server中,数据库连接池是一个经常出问题的地方。下面就总结一下出问题的原因和解决办法。
1.数据库连接泄漏
此类问题一般都是由于开发人员没有正确关闭数据库连接造成的。比如,使用完Connection后,没有调用Connection.close()方法。
1.1. 诊断方法
在Console中,找到Connection Pools Tab 和Diagnostics,设置以下属性(不同版本可能略有区别)
Enable Connection Leak Profiling 启用连接池泄漏的监控。
Enable Connection Profiling 启用连接池监控。
Inactive Connection Timeout 100 表示100秒后强制回收无效连接。默认0,表示使用完才释放回连接池。
无需重启,查看server的log,查找“A JDBC pool connection leak was detected”,如果有,看看是哪个类引起的。
下面是一个数据库连接泄漏的例子:
A JDBC pool connection leak was detected.
A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool.
The following stack trace at create shows where the leaked connection was created.
Stack trace at connection create:
at weblogic.jdbc.wrapper.JTAConnection.init(JTAConnection.java:90)
at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:468)
at weblogic.jdbc.jta.DataSource.connect(DataSource.java:410)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:344)
at troubleshooting.servlets.JdbcConnections.service(JdbcConnections.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
问题解决后,把三个属性设置回先前的值。
1.2. 解决方法
正确的关闭数据库连接。具体代码如下:
Connection conn = null;
ResultSet rs = null;
preparedStatement pss = null;
try {
conn = dataSource.getConnection(USERID,pASSWORD);
pss = conn.prepareStatement("SELECT SAVESERIALZEDDATA FROM SESSION.pINGSESSION3DATA WHERE SESSIONKEY = ?");
pss.setString(1,sessionKey);
rs = pss.executeQuery();
pss.close();
} catch (Throwable t) {
// 错误处理
} finally {
try {
if (conn != null) conn.close();
} catch (Exception e){}
}
2.数据库连接不够用
导致数据库连接不够用的原因主要有:
(1)某些程序占用connection时间过长,如果多个用户同时使用这些程序,则会导致连接不够用。
(2)线程死锁,无法释放connection。
2.1. 诊断方法
(1)监控参数:Waiting For Connection High Count
[domain_name]-> Enviroment -> Servers -> [Server] -> Monitoring -> JDBC查看参数:Waiting For Connection High Count
如果没有此参数,手工添加进来,该参数表示在没有可用连接的情况下,应用程序等待连接的最大个数。
调整后的连接池最大值 = 调整前的连接池最大值 + Waiting For Connection High Count。
一般来说,数据库连接池的大小与最佳并发用户数相当。
(2)在Server Log中,明确抛出下列异常:
java.sql.SQLException: Internal error: Cannot obtain XAConnection weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool BankConnectionPool to allocate to applications, please increase the size of the pool and retry..
at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1493)
at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:455)
at weblogic.jdbc.jta.DataSource.connect(DataSource.java:410)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:344)
at troubleshooting.servlets.JdbcConnections.service(JdbcConnections.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7047)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
如果此时观察connection的监控,会发现所有connection 都是Active,而且还有大量请求等待connection。
2.2. 解决方法
(1)提高Maximum Capacity数量,该值一般略大于峰值情况下的数据库连接数。
Services > JDBC > Connection Pools > BankConnectionPool > Configuration > Connections
(2)重点检查synchronize代码段和涉及数据库锁的代码。如果有必要,可以查看thread dump,看看线程在忙什么和等什么。
3.数据库连接使用超时
此类问题一般是由于某些数据库操作时间比较长,超过了Inactive connection timeout的设置。
3.1. 诊断方法
在Server Log中,明确有下列提示,并且在提示后抛出应用异常:
Forcibly releasing inactive resource "weblogic.jdbc.common.internal.ConnectionEnv@132967d" back into the pool "BankConnectionPool".
这里无法列出应用异常,因为每个应用都不一样,不过很有可能会抛出空指针异常,因为Connection被强制放回池中了,继续使用一个空对象会抛出该异常。
3.2. 解决方法
在高级参数中,提高Inactive connection timeout数量。
Services > JDBC > Connection Pools > BankConnectionPool > Configuration > Connections
4.事务超时
此类问题一般是由于某些数据库操作时间比较长,超过了JTA Timeout Seconds的设置。
4.1. 诊断方法
在Server Log中,明确抛出异常:
weblogic.transaction.internal.TimedOutException: Transaction timed out after 300 seconds
4.2. 解决方法
提高Services > JTA Configuration > Timeout Seconds数量。
注意,这个参数应该小于Inactive connection timeout的值,因为事务必须在连接超时前完成。
如果想分析究竟是哪些SQL语句导致事务超时,可以打开日志AdminServer > Logging > JDBC,选中Enable JDBC Logging,并设置JDBC Log File Name。
发表评论
-
WLS_046:常见故障之十四:Proxy Plug-in 问题
2013-02-25 14:00 749声明:该博文转自http://maping930883.blo ... -
WLS_042:常见故障之十:JMS Queue中的消息被“重复消费”问题
2013-02-25 13:58 1358声明:该博文转自http://maping930883.blo ... -
WLS_038:常见故障之六:Too many open files
2013-02-25 13:53 1054声明:该博文转自http://maping930883.blo ... -
常见故障之五:Out of Memory
2013-02-22 16:19 708声明:该博文转自http://maping930883.blo ... -
WLS_036:常见故障之四:Stack Overflow Error
2013-02-22 16:16 1062声明:该博文转自http://maping930883.blo ... -
WLS_035:常见故障之三:Server Hang
2013-02-22 16:14 804声明:该博文转自http:// ... -
WLS_034:常见故障之二:Server Crash后找不到Core Dump文件
2013-02-22 16:11 1003声明:该博文转自http://maping930883.blo ... -
WLS_033:常见故障之一:Server Crash
2013-02-22 16:10 879声明:该博文转自http:// ... -
WebLogic Server高级管理之五:集群下的Data Source配置
2012-07-31 21:59 1103声明:该博文转自http:// ... -
WebLogic Server高级管理之四:为集群配置Apache代理
2012-07-31 21:55 979. 声明:该博文转自http://maping930883.b ... -
WebLogic Server高级管理之三:集群下的HTTP Session管理
2012-07-31 21:52 1481声明:该博文转自http:// ... -
WebLogic Server高级管理之二:为集群配置ProxyServer
2012-07-31 21:47 1411声明:该博文转自http://maping930883.blo ... -
WebLogic Server高级管理之二:为集群配置ProxyServer
2012-07-22 21:04 0声明:该博文转自热爱生活,热爱JAVA。原文地址为http:/ ... -
WebLogic Server高级管理之一:配置集群
2012-07-22 21:01 1008首先声明:该博文转自 ... -
WebLogic Server高级管理之六:集群下的JMS配置
2012-07-22 20:57 1193首先声明,该博文转自热爱生活,热爱JAVA,原文地址为http ... -
WebLogic Server高级管理之八:JMS 存储与转发
2012-07-22 20:37 1058提醒:weblogic系列博客均转载自千红一酷的博客,原地址为 ... -
WebLogic Server高级管理之七:JMS Topic 持久化订阅
2012-07-22 20:04 999运行环境:WebLogic Server 12.1.1 开发版 ...
相关推荐
请访问下面的repo以获取具有ansible2且没有角色的更新版本。 这比当前的简单。 全局变量:文件名:<playbook> / group_vars / all 指定应用程序名称,即CS,GOLD,GEMS Ex- app_name:CS 指定JVMS以启动/停止。...
此包是本人在修补weblogic漏洞时,http://sn.cloud.ccb.com/bea_wls_internal/classes/META-INF/MANIFEST.MF漏洞实在没办法,试遍网上所有方法,在被逼无奈之下,花了两周研究出来的,就不要想在其他地方找到了,...
fmw_12.2.1.4.0_wls_Disk1_1of1.zip,百度网盘下载地址在TXT文件内
fmw_14.1.1.0.0_wls_lite_generic.jar 百度网盘下载地址在TXT文件内
mac版本weblogic安装包
fmw_12.2.1.2.0_wls_Disk.zip
fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip weblogic12c,官网下载太慢,有需要可取
包括:Java EE 7,Weblogic Server和Oracle Coherence(加快速度的缓存管理部件)。
WLS计算,加权最小二乘法计算,含代码。
WebLogic是美商Oracle的主要产品之一,是并购BEA得来。是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 已推出到12c(12.2.1.4) 版。而此产品...
室内无线定位技术,基于最小二乘法的matlab仿真程序
Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation,wls filter,WLS filter code
Wls_weblogic管理监控.doc
wls1213_dev_update3.zip weblogic安装包 大家也可以去这里下载wls1213_dev_update3.zip wls1213_dev_update3.zip wls1213_dev_update3.zip
Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation (ACM TOG 2008)
wls12c (12.2.1.4.0)2022年4月19日发布的最新累积补丁集 12.2.1.4.0.PNG p28186730_139428_Generic.zip p31544353_122140_Linux-x86-64.zip p31544353_122140_MSWIN-x86-64.zip p32720458_122140_Generic.zip p...
wls1036_generic.jar是weblogic10.3.6解压后的jar包,在安装目录下执行即可安装weblogic11g
wls1213_dev.zip
oracle ocm 11g的考试需要10.3.2的weblogic,特提供资源
Weblogic Server 11gR1,版本号是...在命令行,进入安装文件wls1036_generic.jar所在文件夹 然后输入命令: Java -jar wls1036_generic.jar ,点击回车后程序会启动weblogic安装文件的图形安装界面,若有问题请留言