分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

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

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

Weblogic常见故障常 JDBC Connection Pools相关推荐

  1. 计算机常考应用分析题,计算机常见故障及排除

    这是我们东坡下载为大家准备的一篇计算机应用中的常见问题分析与故障排除,有需要想了解计算机常见故障及排除的朋友们可以来我们这里免费的下载这篇word,丰富详细的内容肯定是你们所需要的! 计算机应用中的常 ...

  2. 机房安防系统常见故障原因及处理方法

    前言: 机房对安防是非常重视的,经常对火灾自动报警系统进行管理和维护,火灾自动报警系统是一门先进的消防技术设施,档案资料的管理.触发装置在使用中常出现的问题及排除.报警装置的检查.电源检查.保证联动控 ...

  3. 机房六大安防系统常见故障原因及处理方法

    前言: 机房对安防是非常重视的,经常对火灾自动报警系统进行管理和维护,火灾自动报警系统是一门先进的消防技术设施,档案资料的管理.触发装置在使用中常出现的问题及排除.报警装置的检查.电源检查.保证联动控 ...

  4. Jmeter中JDBC链接配置 JDBC Connection Configuration

    如果在Jmeter 中想用到连接数据库的功能,必须下载jar包,常见的关系型数据库jar包见以下共享链接 链接:https://pan.baidu.com/s/1t-k9RW141lw0j_QSw53 ...

  5. 光纤收发器常见故障及解决方法

    光纤收发器一般应用在以太网电缆无法覆盖.必须使用光纤来延长传输距离的实际网络环境中,通常定位于宽带城域网的接入层应用,在各种监控安全工程中应用非常的广泛.但是我们在使用光纤收发器的过程中难免会碰到一些 ...

  6. 光端机常见故障问题及其解决方案

    现如今,我们在安防监控工程项目中越来越多的采用光纤技术来传输图像.声音.数据等信息,光纤传输系统的关键设备数字视频光端机受到广大用户的青睐.接下来杭州飞畅科技根据数十年的经验总结了下光端机常见故障及解 ...

  7. 连接MySQL数据库时常见故障问题的分析与解决

    连接MySQL数据库时常见故障问题的分析与解决 初学的mysql网友好象经常会碰到mysql无法连接的错误.特开贴收集这样问题的现象和原因. 先自己扔块砖头出来. 归纳如下: 故障现象 : 无法连接 ...

  8. java咖啡机故障5_【咖啡小常识】咖啡机不得不知道的常见故障及解决方法

    原标题:[咖啡小常识]咖啡机不得不知道的常见故障及解决方法 咖啡行业交流请加私 人微信精品咖啡香,微信号: (长按复制) thinkingcapacity 一.没有蒸汽或做出的咖啡不热 可能原因 1. ...

  9. 机器人出魔切还是三相_工业机器人常见故障和修理方法

    机械手常见故障和修理方法 1.先动口再动手 对于有故障的电气设备,不应急于动手,应先询问产生故障的前后经过及故障现象.对于生疏的设备,还应先熟悉电路原理和结构特点,遵守相应规则.拆卸前要充分熟悉每个电 ...

  10. 三星电视开机显示服务器异常,三星液晶电视常见故障及维修方法

    三星液晶电视常见故障及维修方法 三星液晶电视常见的故障及检修思路: (1)开机三无,电源灯不亮.弟一个是电源板坏,弟二个是CPU部分工作不正常. (2)开机出现无象无音,电源灯闪一下变成常亮,屏幕在开 ...

最新文章

  1. HDU 1406 完数
  2. 你只使用到了 VS Code 20% 的功能?让 VS Code 首著作者带你玩转 VS Code!
  3. AOE网上的关键路径
  4. 在linux下安装星际译王
  5. 监控行业应用解决方案
  6. uniapp无法使用substr_关公战秦琼------Excel、SPSS Modler和R的使用对比(下)
  7. mysql建立从库同时备份_mysql主从库配置读写分离以及备份
  8. C++设计模式-AbstractFactory抽象工厂模式
  9. 征集大家的网站如何防范DDOS攻击解决方案
  10. hmcl整合包导入_我只用了一篇文章就完成了Spring+SpringMVC+MyBatis详细整合教程
  11. (二)以太网与WiFi协议
  12. nvivo服务器项目,【NVivo教程】在Nvivo中设置案例路线图
  13. unity人物动画配置
  14. 灌篮高手湘北高中原型
  15. 计算机图片处理是什么应用,计算机图像处理技术及其应用领域
  16. 产品周报第27期|会员新增拉黑用户权益;CSDN APP V5.1.0版本发布……
  17. 史上最难英语单词——as的七十二变【猴精】
  18. AB post 请求压测
  19. Oracle 11.2.0.1 rac升级到11.2.0.4
  20. 微信更新,干掉手机输入法!

热门文章

  1. Dojo1.6新特性概览
  2. linux平台 oracle 数据库 安装文档
  3. primary key and Foreign Key someCopyIdea
  4. R语言ETL工程:集合运算(intersect/union/setdiff)
  5. 是否,是否,总是富肥穷瘦?(文末上周投票公布)
  6. R中数据结构与数据的输入
  7. Mybatis参数Integer类型值为0 源码处理
  8. wex5中集成的mysql数据库 打开时一闪而过 报错
  9. yum 命令提示语法错误
  10. Codeforces Round #277 (Div. 2)