`
ahua186186
  • 浏览: 555357 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解决生产环境接口应用包jboss数据库连接池满的问题

阅读更多
以前只排查过DHCP连接池泄露的问题,思路是通过btrace脚本收集日志排查问题,jboss用的是自带的连接池,不熟悉,经过查看官方文档终于找到jboss连接池的核心类,如下:

(1)Jboss连接池核心类:InternalManagedConnectionPool :包含2个核心方法:returnConnection  (),getConnection()方法。

(2) 当应用需要进行业务处理时,首先会执行一个getConnection的操作,用于从连接池中获取连接,当业务处理完成后,需要把连接放回到连接池中,执行一个returnConnection的操作。

思路1:通过btrace脚本收集日志排查问题


btrace脚本:

监控DHCP连接池:
package test4tool;

import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.timeMillis;

import com.sun.btrace.BTraceUtils.Threads;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Export;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.OnTimer;
import com.sun.btrace.annotations.Return;
import com.sun.btrace.annotations.Self;
import com.sun.btrace.annotations.TLS;

@BTrace 
public class BTraceConnection{
	@TLS
	private static long startTime = 0;
	
	@Export public static long openedCount;  
    @Export public static long closedCount;
    @Export public static long i;
    
    @OnMethod(
    clazz="/.*PoolingDataSource/",
    method="getConnection", 
    location=@Location(Kind.RETURN)
    )
    public static void m(@Return Object obj) {
    				startTime = timeMillis();
            openedCount++;  
            println("++++++++++++++++++++++++++++++++One connection is opened!++++++++++++++++++++++++++");  
            println(obj);  
            Threads.jstack();  
    }  
    
     @OnMethod(clazz="/.*PoolableConnection/", method="close")
    public static void d(@Self Object obj) {
            closedCount++;  
            println("======================One connection is closed!========================");  
            println(obj);  
            Threads.jstack();  
    } 
 
    @OnTimer(10000)  
   	public static void ontime() {
    	 println("Total opened connection:");  
         println(openedCount);  
         println("Total closed connection:");  
         println(closedCount); 
   } 
}




监控jboss连接池:

package test4tool;

import static com.sun.btrace.BTraceUtils.println;
import static com.sun.btrace.BTraceUtils.timeMillis;

import com.sun.btrace.BTraceUtils.Threads;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Export;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.OnTimer;
import com.sun.btrace.annotations.Return;
import com.sun.btrace.annotations.Self;
import com.sun.btrace.annotations.TLS;

@BTrace 
public class BTraceConnection{
	@TLS
	private static long startTime = 0;
	
	@Export public static long openedCount;  
    @Export public static long closedCount;
    @Export public static long i;
    
    @OnMethod(
    clazz="/.*InternalManagedConnectionPool/",
    method="getConnection", 
    location=@Location(Kind.RETURN)
    )
    public static void m(@Return Object obj) {
    				startTime = timeMillis();
            openedCount++;  
            println("++++++++++++++++++++++++++++++++One connection is opened!++++++++++++++++++++++++++");  
            println(obj);  
            Threads.jstack();  
    }  
    
     @OnMethod(clazz="/.*InternalManagedConnectionPool/", method="returnConnection")
    public static void d(@Self Object obj) {
            closedCount++;  
            println("======================One connection is closed!========================");  
            println(obj);  
            Threads.jstack();  
    } 
 
    @OnTimer(10000)  
   	public static void ontime() {
    	   println("Total opened connection:");  
         println(openedCount);  
         println("Total closed connection:");  
         println(closedCount); 
   } 
}




思路2:抓取oracle数据库耗费资源的sql语句和 查询Oracle每天执行慢的SQL排查问题

抓取oracle数据库耗费资源的sql语句:
1.http://wukui127.blog.51cto.com/2866802/963370/

Oracle 查询每天执行慢的SQL:
http://blog.itpub.net/28602568/viewspace-1364844/

http://kamiff.iteye.com/blog/725343


参考:

http://www.dbafree.net/?p=378
http://docs.jboss.org/jbossas/javadoc/4.0.2/org/jboss/resource/connectionmanager/InternalManagedConnectionPool.java.html
分享到:
评论

相关推荐

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     19.1.2 使用配置文件指定的数据库连接池  19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     19.1.2 使用配置文件指定的数据库连接池  19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     19.1.2 使用配置文件指定的数据库连接池  19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     19.1.2 使用配置文件指定的数据库连接池  19.1.3 从容器中获得数据源  19.1.4 由Java应用本身提供数据库连接  19.2 配置事务类型  19.3 把SessionFactory与JNDI绑定  19.4 配置日志  19.5 使用XML格式的配置...

    超级有影响力霸气的Java面试题大全文档

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java....

    JAVA上百实例源码以及开源项目源代码

    图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    连接池 串行化技术 影子Master架构 批量写入 配置中心 去中心化 通讯机制 同步 RPC RMI 异步 MQ Cron 数据层架构设计 缓存优化 DAO&ORM; 双主架构 主从同步 读写分离 性能优化架构能力 代码级别...

    java面试题

    答:JDBC数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问。 什么情况下不建议使用Hibernate? 答:当数据量大,并且表关系复杂的时候不建议使用。 sleep()和wait()有什么区别? ...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    MYSQL中文手册

    2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得...

    MySQL 5.1参考手册中文版

    2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得...

    mysql官方中文参考手册

    2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表...

    MySQL 5.1参考手册

    2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表...

    java 面试题 总结

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang....

    MySQL5.1参考手册官方简体中文版

    2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表...

    ssh(structs,spring,hibernate)框架中的上传下载

     首先,必须定义一个能够从连接池中抽取出本地数据库JDBC对象(如OracleConnection,OracleResultSet等)的抽取器:nativeJdbcExtractor,这样才可以执行一些特定数据库的操作。对于那些仅封装了Connection而未包括...

    mysql5.1中文手册

    使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息...

Global site tag (gtag.js) - Google Analytics