Weblogic常见故障常:JDBC Connection Pools

WebLogic Server中数据库连接池是一个经常出问题的地方,总结一下出问题的原因和解决办法。

一、数据库连接泄漏
此类问题一般都是由于开发人员没有正确关闭数据库连接造成的。比如使用完Connection后,没有调用Connection.close()方法。

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)
问题解决后,把三个属性设置回先前的值。
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){}
}

二、数据库连接不够用

导致数据库连接不够用的原因主要有:
①某些程序占用connection时间过长,如果多个用户同时使用这些程序,则会导致连接不够用。
②线程死锁,无法释放connection。
1、诊断方法
①监控参数:Waiting For Connection High Count
[domain_name]-> Enviroment -> Servers -> [Server] -> Monitoring -> JDBC查看参数:Waiting For Connection High Count
如果没有此参数,手工添加进来,该参数表示在没有可用连接的情况下,应用程序等待连接的最大个数。调整后的连接池最大值 = 调整前的连接池最大值 + Waiting For Connection High Count。一般来说,数据库连接池的大小与最佳并发用户数相当。

②在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、解决方法
①提高Maximum Capacity数量,该值一般略大于峰值情况下的数据库连接数。Services > JDBC > Connection Pools > BankConnectionPool > Configuration > Connections
②重点检查synchronize代码段和涉及数据库锁的代码。如果有必要,可以查看thread dump,看看线程在忙什么和等什么。

三、数据库连接使用超时
此类问题一般是由于某些数据库操作时间比较长,超过了Inactive connection timeout的设置。
1、诊断方法
在Server Log中,明确有下列提示,并且在提示后抛出应用异常:
Forcibly releasing inactive resource "weblogic.jdbc.common.internal.ConnectionEnv@132967d" back into the pool BankConnectionPool".这里无法列出应用异常,因为每个应用都不一样,不过很有可能会抛出空指针异常,因为Connection被强制放回池中了,继续使用一个空对象会抛出该异常。
2、解决方法
在高级参数中,提高Inactive connection timeout数量。
Services > JDBC > Connection Pools > BankConnectionPool > Configuration > Connections

四、事务超时
此类问题一般是由于某些数据库操作时间比较长,超过了JTA Timeout Seconds的设置。
1、诊断方法
在Server Log中,明确抛出异常:
weblogic.transaction.internal.TimedOutException: Transaction timed out after 300 seconds
2、解决方法
提高Services > JTA Configuration > Timeout Seconds数量。
注意这个参数应该小于Inactive connection timeout的值,因为事务必须在连接超时前完成。如果想分析究竟是哪些SQL语句导致事务超时,可以打开日志AdminServer > Logging > JDBC,选中Enable JDBC Logging,并设置JDBC Log File Name。

原帖地址:http://maping930883.blogspot.com/2009/03/wls040jdbc-connection.html

时间: 2024-09-23 14:56:43

Weblogic常见故障常:JDBC Connection Pools的相关文章

路由器常见故障修复

路由器常见故障修复: 宽带路由器在企业网络中的应用是相当广泛的,在运行的过程中出现故障是在所难免的,虽然故障现象多种多样,引起故障发生的原因也不尽相同,但从大体上可以把这些故障分为硬件故障和软件故障,具体来说就是一些网络连接性问题.配置文件选项问题以及网络协议问题等. 由于路由器发生故障而导致企业网络中断,这不但会给企业带来诸多的不便,也可能会因此而造成一定的损失,因而及时地解决企业宽带路由器的故障是很必要的.对于一些常见的故障问题,只要企业的网络维护人员细心地分析一下,就不难解决的.下面就企业

主板常见故障排除办法

  主板常见故障排除方法,如下: 主板是电脑的基础部件之一,尤如一个桥梁,担负着CPU.内存.硬盘.显卡等各种设备的连接,其性能直接关系到整台PC电脑的稳定运行.在日常生活中,我们遇到主板的故障并不少见. 常见主板故障大致有以下几种:一是加电之后无法通过自检.电脑无法正常启动;二是主板上的接口损坏,导致在检测硬盘.光驱等时出现错误;三是BIOS无法自动保存等.很多时候,由于散热不良等因素,还很有可能导致南北桥芯片烧毁,造成主板完全报废.但大部分情况下出现的故障并不可怕,主要是用户粗心大意造成的.

散热风扇常见故障及解决办法

随着微处理器内集成越来越多电路,以及不断增加的能耗,散热问题问题就不得不再次重提.针对电脑的散热系统多种多样,水冷.半导体制冷.油冷等.但我们最常使用的还是比较廉价的风冷,也就是散热风扇.在台式机里使用散热风扇的主要有两个设备,一个是电源一个是CPU.电源风扇因设计问题一般寿命比较长,而CPU散热风扇则是易耗品.本文就是针对CPU散热风扇常见故障,提出一些简易的解决办法. 常见故障一:一486微机CPU散热风扇,在近期使用中突然发出特别嘈杂的噪音.甚至比机箱电源的发出的声音还要大,经过仔细检查.

电脑常见故障的维修技巧

电脑出现的故障原因扑朔迷离,让人难以捉摸.并且由于Windows操作系统的组件相对复杂,电脑一旦出现故障,对于普通用户来说,想要准确地找出其故障的原因几乎是不可能的.下面一些最为常见也是最为典型的电脑故障的诊断.维护方法,通过它就可以解决电脑出现的故障问题了. 一.主板 主板是整个电脑的关键部件,在电脑起着至关重要的作用.如果主板产生故障将会影响到整个PC机系统的工作.下面就一起来看看主板在使用过程中最常见的故障有哪些. 常见故障一:开机无显示 电脑开机无显示,首先要检查的就是是BIOS.主板的

光电鼠标常见故障及处理方法

  光电鼠标使用光电传感器替代机械鼠标中的机械元件,因而维修方法具有独特性.光电鼠标故障的90%以上为断线.按键接触不良.光学系统脏污造成,少数劣质产品也常有虚焊和元件损坏的情况出现. 电缆芯片断线 电缆芯线断路主要表现为光标不动或时好时坏,用手推动连线,光标抖动.一般断线故障多发生在插头或电缆线引出端等频繁弯折处,此时护套完好无损,从外表上一般看不出来,而且由于断开处时接时断,用万用表也不好测量.处理方法是:拆开鼠标,将电缆排线插头从电路板上拔下,并按芯线的颜色与插针的对应关系做好标记后,然后

鼠标常见故障问题解析

  鼠标常见故障一.鼠标右键失灵怎么办 这其中就包括系统.鼠标本身问题及硬件硬盘问题或者是系统安装某些程序锁导致. 鼠标常见故障二.鼠标不灵怎么办 现在鼠标很便宜了,鼠标如果实在不好用的话,就更换各新的吧,如果自己能修最好,要去你拿去修的话,那就不怎么划算了.不过谁都不想东西坏的.只属个人意见,仅供参考. 鼠标常见故障三.鼠标左键失灵怎么办 拆开鼠标对鼠标内部进行检修鼠标,修不好的话就只能更换鼠标 鼠标常见故障四.电脑鼠标不能拖动文件的解决方法 查看鼠标有没有被锁定,有没有自动排列或者对齐到网络

宽带路由器常见故障巧排除

宽带路由器常见故障巧排除在SOHO和中小型企业用户中,宽带路由器应用非常普遍.对于一些网络新手来说,出现一些说明手册未涉及的故障,有时难以应付.下面,笔者就一些常见的故障和问题进行分析,并提供解决方法. 一. 线路不通,无法建立连接 1. 用网线将路由器的WAN口与ADSL Modem相连,电话线连ADSL Modem的"Line"口.ADSL Modem与宽带路由器之间的连接应当使用直通线. 2. 检查路由器LAN中的Link灯信号是否显示,路由器至局域网是否正常联机.路由器的LAN

Sql server数据库不能启动常见故障

server|数据|数据库 SQL Server不能启动的常见故障 --是否修改了操作系统密码? --修改操作系统密码,导致SQL不能启动的解决办法: 1.我的电脑--控制面板--管理工具--服务--右键MSSQLSERVER--属性--登陆--登陆身份--选择"本地系统帐户" 或: 2.我的电脑--控制面板--管理工具--服务--右键MSSQLSERVER--属性--登陆--登陆身份--选择"此帐户"--密码和确认密码中输入你修改后的administrator密码

SQL Server不能启动的常见故障[1][1]

SQL Server不能启动的常见故障 --是否修改了操作系统密码? --修改操作系统密码,导致SQL不能启动的解决办法: 1.我的电脑--控制面板--管理工具--服务--右键MSSQLSERVER--属性--登陆--登陆身份--选择"本地系统帐户" 或: 2.我的电脑--控制面板--管理工具--服务--右键MSSQLSERVER--属性--登陆--登陆身份--选择"此帐户"--密码和确认密码中输入你修改后的administrator密码. 两者的区别: 选择第一种