博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaEE连接池泄漏问题检测Oracle数据库
阅读量:6473 次
发布时间:2019-06-23

本文共 1907 字,大约阅读时间需要 6 分钟。

1、项目环境

项目是典型的轻量级JavaEE项目,使用SSH框架构建,数据源使用DBCP管理,和Spring进行了整合。

项目数据库使用Oracle数据库。

项目DBCP配置内容如下

 

###### DBCP连接池参数配置 ###### #######jdbc连接池初始连接数,设置后更好发挥连接池左右jdbc.initialSize=10#jdbc最大活动连接数,即连接池上限,要小于数据库连接上限,项目组根据系统最大用户上限数和访问量来调整jdbc.maxActive=20#jdbc最大空闲连接数 ,建议与初始连接数相同jdbc.maxIdle=10#jdbc最大等待连接数,必须小于sql或存储过程最长执行时间,-1表示无限制jdbc.maxWait=-1###### DBCP连接池高级参数配置 ###### #######是否让连接池自动回收泄露的连接jdbc.removeAbandoned=true#jdbc连接保持超过2小时(3600秒),并且剩余连接很少时自动回收泄露的连接#规则:剩余空闲连接<2,当前活动连接数仅比最大连接上限小3jdbc.removeAbandonedTimeout=5#数据库连接断开或重启后连接池用该语句测试来恢复连接jdbc.validationQuery=select 1 from dual

项目异常时会抛出如下异常

 

DBCP object created 2013-08-23 13:59:41 by the following code was never closed:java.lang.Exception	at org.apache.commons.dbcp.AbandonedTrace.setStackTrace(AbandonedTrace.java:157)	at org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:76)	at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)	at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)	at java.lang.reflect.Method.invoke(Method.java:585)	at net.bull.javamelody.JdbcWrapper$3.invoke(JdbcWrapper.java:742)	at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:271)	at $Proxy0.getConnection(Unknown Source)

2、对DBCP的配置如下:

#jdbc最大空闲连接数为0,每次应用获取连接时,直接向数据库获取连接,连接池不缓冲连接
jdbc.maxIdle=0

 

#是否让连接池自动回收泄露的连接,有连接泄漏也不回收

jdbc.removeAbandoned=false
3、用PLSQL登陆到应用连接的目标库
使用如下SQL语句查看当前用户名下指定主机连接Oracle的情况
select * from v$session where username='OPRISK' and machine='PC' 

查询的目的在于找到指定主机,以指定用户名连接数据库的状况。

如果查询时报错,看看报错信息,可能是没有权限,grant select on v_$session to <username>; 

OPRISK    用户名(填写项目连接数据库时使用的用户名)

PC        主机名(填写项目所在主机的主机名)
PLSQL设置自动每秒刷新查询结果
4、点击应用发送请求,
如果发现发送某个请求后,PLSQL查到改连接而且连接一直存在,不关闭,说明,改请求导致了连接泄露。

个人观点,期待探讨!

 

 

转载地址:http://myvko.baihongyu.com/

你可能感兴趣的文章
App工程结构搭建:几种常见Android代码架构分析
查看>>
使用openssl进行证书格式转换
查看>>
ZOJ 3777 Problem Arrangement
查看>>
虚拟机类加载机制
查看>>
Callable和Future
查看>>
installshield12如何改变默认安装目录
查看>>
少用数字来作为参数标识含义
查看>>
ScrollView中嵌套ListView
查看>>
JAVA虚拟机05--面试必问之JVM原理
查看>>
Algs4-2.3.1如何切分数组
查看>>
uva 10815 - Andy's First Dictionary(快排、字符串)
查看>>
观察者模式
查看>>
在properties.xml中定义变量,在application.xml中取值问题
查看>>
js 数组
查看>>
Linux scp命令详解
查看>>
struct和typedef struct
查看>>
cell reuse & disposebag
查看>>
【故障处理】ORA-12545: Connect failed because target host or object does not exist
查看>>
云时代,程序员将面临的分化
查看>>
js判断移动端是否安装某款app的多种方法
查看>>