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,当前活动连接数仅比最大连接上限小3
jdbc.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查到改连接而且连接一直存在,不关闭,说明,改请求导致了连接泄露。

个人观点,期待探讨!

JavaEE连接池泄漏问题检测Oracle数据库的更多相关文章

  1. ORA-12538;ORA-12154;使用PL/SQL dve无法连接远程服务器上的oracle数据库,同时本机上也安装了一个oracle数据库

    问题描述:本人使用PL/SQL dve连接远程服务器上的oracle数据库,一直是没有问题的.我想提高下自己在数据库方面的能力就在自己的笔记本上安装了一个oracle数据库实例,安装并配置好之后,使用 ...

  2. plsql 连接 虚拟机Linux下的Oracle数据库 失败

    plsql 连接 虚拟机Linux下的Oracle数据库 失败2017年09月09日 09:10:23 守望dfdfdf 阅读数:187 标签: oraclelinux 更多个人分类: 工具 软件编辑 ...

  3. c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包

    [-] DBCP连接池配置 dbcp jar包 c3p0连接池配置 c3p0 jar包 jdbc-pool连接池配置 jdbc-pool jar包 常用数据库的driverClass和jdbcUrl ...

  4. [转]oracle10客户端PL/SQL Developer如何连接远程服务器上的oracle数据库

    时间:2013年8月21日 前提条件:假设你已经安装好了oracle和PL/SQL Developer,知道远程服务器的IP和数据库端口,知道远程服务器上的oracle数据库名和密码 如何用PL/SQ ...

  5. 如何连接别人电脑上的Oracle数据库--duende99

    需要一些前提条件: 1.对方的主机能被连接(如在同一局域网内) 2.需要知道对方数据库IP.端口号.服务名 3.需要知道对方提供的管理数据库的用户名及密码 连接方法: 1.在本地的oracle安装目录 ...

  6. 如何连接别人电脑上的Oracle数据库?

    需要一些前提条件: 1.对方的主机能被连接(如在同一局域网内) 2.需要知道对方数据库IP.端口号.服务名 3.需要知道对方提供的管理数据库的用户名及密码 连接方法: 1.在本地的oracle安装目录 ...

  7. SQL server 数据连接池使用情况检测

    1.依据HOST_NAME请求session_id 查询 select DB_NAME(database_id) dbname,login_name,t1.session_id,t1.request_ ...

  8. PLSQL 连接不上64位ORACLE数据库解决办法

    http://it.oyksoft.com/post/6003/ huan jing bian liang TNS_ADMIN  D:\OracleClient D:\OracleClient\TNS ...

  9. Druid连接池(三)

    十二.Druid缓存 连接Oracle数据库,打开PSCache,在其他的数据库连接池都会存在内存占用过多的问题,Druid是唯一解决这个问题的连接池. Oracle数据库下PreparedState ...

随机推荐

  1. baike并行计算概念

    并行计算 概论 ▪ 高性能计算 ▪ 计算机集群 ▪ 分布式计算 ▪ 网格计算 ▪ 云端运算         方式 ▪ Bit-level parallelism ▪ Instruction level ...

  2. linux下core文件设置(转)

    在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数. 1.core文件的生成开 ...

  3. UVA514 Rails

     铁轨 PopPush城市有一座著名的火车站.这个国家到处都是丘陵.而这个火车站是建于上一个世纪.不幸的是,那时的资金有限.所以只能建立起一条路面铁轨.而且,这导致这个火车站在同一个时刻只能一个轨道投 ...

  4. hdu 4055 Number String(dp)

    Problem Description The signature of a permutation is a string that is computed as follows: for each ...

  5. Android 体系结构

    Anroid是在Linux基础开发出的一个移动设备开发平台.它自上而下包含四个部分: Application(应用程序) Applicaton Framework(应用程序框架) Libraries& ...

  6. iOS 使用pods报错问题 pod --version

    错误信息如下 find_spec_for_exe': can't find gem cocoapods (>= 0.a) (Gem::GemNotFoundException) from /Us ...

  7. XSS完全解决方案

    xss 为什么不能阻止用户输入不安全数据 比如用户想发一篇标题的文章 1+1>2吗? 为什么不在数据库存的时候就处理好或者接口里处理好 1<2 会被转义为 1<2,放到html中确实 ...

  8. NetAnalyzer笔记 之 八 NetAnalyzer2016使用方法(2)

    [创建时间:2016-05-06 22:07:00] NetAnalyzer下载地址 在写本篇的时候,NetAnalyzer 3.1版本已经发布,所以本篇就以最新版本的为例继续使用,并且顺带说明一下, ...

  9. Android开发小问题——java使用

    2013-09-25 导语:离上次写博客有点久了,这次写两个开发中解决的问题吧. 正文: 1.ArrayList<E>使用remove问题: 2.字符串映射到函数运行方法: ==== 1. ...

  10. Sonar入门(五):使用 Sonar 进行代码质量管理

    Sonar 概述 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具. 与持续集成工具(例如 Hudson/Jenkins ...