`
C_LIFE
  • 浏览: 37588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WLS_040:常见故障之八:JDBC Connection Pools

 
阅读更多
声明:该博文转自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。

分享到:
评论

相关推荐

    ansible_wls_patch:使用Ansible修补Weblogic

    请访问下面的repo以获取具有ansible2且没有角色的更新版本。 这比当前的简单。 全局变量:文件名:<playbook> / group_vars / all 指定应用程序名称,即CS,GOLD,GEMS Ex- app_name:CS 指定JVMS以启动/停止。...

    bea_wls_internal.war

    此包是本人在修补weblogic漏洞时,http://sn.cloud.ccb.com/bea_wls_internal/classes/META-INF/MANIFEST.MF漏洞实在没办法,试遍网上所有方法,在被逼无奈之下,花了两周研究出来的,就不要想在其他地方找到了,...

    weblogic fmw_12.2.1.4.0_wls_Disk1_1of1.zip.txt

    fmw_12.2.1.4.0_wls_Disk1_1of1.zip,百度网盘下载地址在TXT文件内

    fmw_12.2.1.4.0_wls_lite_Disk1_1of1.zip

    Oracle WebLogic Server(简称WLS)是Oracle公司推出的高端企业级应用服务器,是Java EE应用程序的重要运行平台。本篇文章将详细探讨WLS 12.2.1.4.0的Lite版本,即轻量级版,该版本在保持核心功能的同时,提供了更...

    weblogic fmw_14.1.1.0.0_wls_lite_generic.jar.txt

    fmw_14.1.1.0.0_wls_lite_generic.jar 百度网盘下载地址在TXT文件内

    fmw_12.2.1.4.0_wls_quick_Disk1_1of1.zip

    该压缩包"fmw_12.2.1.4.0_wls_quick_Disk1_1of1.zip"中的"fmw_12214_readme.html"文件,通常包含了详细的安装指南和注意事项,包括系统需求、安装步骤、常见问题解答等内容,是安装过程中的重要参考文档。...

    fmw_14.1.1.0.0_wls_lite_quick_generic.jar

    mac版本weblogic安装包

    WLS_MM.zip_wls_wls matlab_最小二乘法

    在本资料包"WLS_MM.zip"中,包含了一个名为"WLS_MM"的文件,这可能是一个MATLAB程序,用于实现加权最小二乘法(Weighted Least Squares, WLS)的计算。 加权最小二乘法是普通最小二乘法(Ordinary Least Squares, ...

    weblogic12c 安装包 fmw_12.2.1.2.0_wls_Disk1_1of1.zip

    它提供了丰富的功能,包括事务处理、集群、安全性、JMS消息队列、JDBC数据源以及对Java EE标准的支持。本安装包`fmw_12.2.1.2.0_wls_Disk1_1of1.zip`包含了WebLogic Server的基础组件和相关工具。 首先,让我们深入...

    fmw_14.1.1.0.0_wls_lite_Disk1_1of1.zip

    WebLogic是美商Oracle的主要产品之一,是并购BEA得来。是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 已推出到12c(12.2.1.4) 版。而此产品...

    WLS.rar_WLS matlab_WLS 定位_WLS定位_program wls_无线 定位

    在室内无线定位系统中,常见的信号源可以是Wi-Fi接入点、蓝牙设备或是专门的射频标签。接收端根据接收到多个信号源的信号强度或到达时间差(Time Difference of Arrival, TDOA)来估算自身位置。WLS算法通过构建一个...

    WLS_Filter

    Edge-Preserving Decompositions for Multi-Scale Tone and Detail Manipulation,wls filter,WLS filter code

    wls1036_generic.jar

    【标题】"wls1036_generic.jar" 是Oracle WebLogic Server 10.3.6的一个核心组件,这个JAR文件包含了WebLogic Server的基础功能和管理工具。WebLogic Server是一个广泛应用的Java EE应用服务器,它为企业级应用程序...

    weblogic各个版本安装包

    fmw_12.1.3.0.0_wls.jar fmw_12.2.1.2.0_wls.jar fmw_12.2.1.3.0_wls.jar fmw_12.2.1.4.0_wls_lite_generic.jar fmw_14.1.1.0.0_wls.jar wls_121200.jar wls1036_generic.jar wls1032_linux32.bin

    Weblogic10.3.6(wls1036_generic.jar)安装包linux,windows,mac操作系统通用百度网盘下载

    ### Weblogic 10.3.6 (wls1036_generic.jar) 安装包概述 #### 一、Weblogic 10.3.6版本简介 Oracle WebLogic Server 是一款应用服务器,适用于开发、部署并管理企业级应用程序。它支持多种协议和服务,并且与Java ...

    基于WLS滤波的HDR显示_HDR_WLS_最小二乘滤波

    **基于WLS滤波的HDR显示 - HDR_WLS_最小二乘滤波** 高动态范围(HDR)图像技术是现代数字图像处理中的一个重要领域,它能够捕捉并显示比普通低动态范围(LDR)图像更广泛的亮度范围。HDR图像通常包含比人眼所能感知的更...

    Weblogic Server 11gR1 ,wls1036_generic.jar

    Weblogic Server 11gR1,版本号是...在命令行,进入安装文件wls1036_generic.jar所在文件夹 然后输入命令: Java -jar wls1036_generic.jar ,点击回车后程序会启动weblogic安装文件的图形安装界面,若有问题请留言

    wls_p33172858_1036_Generic.zip

    Oracle提供了一系列工具,如WLST(WebLogic Scripting Tool)和EM(Enterprise Manager),帮助管理员监控服务器状态,收集性能数据,并进行故障排查。通过这些工具,你可以跟踪补丁应用后的性能变化,及时发现并...

    wls_filter

    然而,文档指出双边滤波在提取任意尺度的细节上存在局限性,因此引入了基于加权最小二乘(Weighted Least Squares, WLS)优化框架的新边缘保持平滑算子。 4. **加权最小二乘(Weighted Least Squares, WLS)**:这...

Global site tag (gtag.js) - Google Analytics