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

转载于:https://www.cnblogs.com/jjzd/p/6676575.html

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. 植物根际微生物组也有昼夜节律
  2. (0072)iOS开发之UITableViewCell高度自适应探索--cell预估高度
  3. oracle编程艺术在线,oracle编程艺术笔记-1
  4. Spring Boot处理静态资源(自定义资源映射)
  5. c++常见面试题30道
  6. keras优化算法_自然场景文本识别(OCR),keras-yolo3-densenet-ocr
  7. MySQL模糊查询的那些谣言
  8. java 线程不安全例子_Java中多线程安全问题实例分析
  9. 如何使用速问速答求解一元二次方程
  10. 海康SDK/Ehome协议/RTSP协议/GB28181安防视频云服务EasyCVR前端音频采集流程介绍
  11. SPSS 数据的统计分析
  12. 为什么需要public static void main(String[] agrs)这个方法
  13. jsp异常 The JSP specification requires that an attribute name is preceded by whitespace
  14. java获取京东token_京东开放服务平台(JOS)关于token问题汇总(一)
  15. Java 的字节与字符输入/输出流的类整理——zyx笔记
  16. BUU-MISC-你能看懂音符码
  17. 快看!RobotArt如何降服四轴机器人?
  18. 【萌新向】c语言求解八数字(华容道)问题
  19. 什么是产品分析?谁该使用产品分析?|产品分析全解
  20. 果实可采摘点论文汇总

热门文章

  1. Redis 分布式客户端 Redisson 分布式锁快速入门
  2. RocketMQ Client 编码快速入门 与 可视化控制台
  3. java中eq、ne、gt、lt、ge、le分别代表含义
  4. html利用cookie登陆,前端登陆注册实现——利用cookie模仿后台数据库存取数据
  5. php rsa2 微博,微博登录分析
  6. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_05-freemarker基础-List指令
  7. (简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程
  8. 通过tomcat配置solr 4.10.3
  9. lc 778. Swim in Rising Water
  10. weka连接mysql数据库