`
ahua186186
  • 浏览: 561975 次
  • 性别: 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
分享到:
评论

相关推荐

    jboss配置MySql的JNDI

    JNDI作为Java平台的标准命名和目录接口,用于查找和管理分布式环境中的对象和服务,包括数据库连接等资源。通过在JBoss中配置JNDI数据源,可以实现应用程序与数据库之间的解耦,提高系统的可维护性和扩展性。 ### ...

    jboss 安装应用

    2. 数据源配置:在 `standalone.xml` 中配置数据库连接池,如MySQL、Oracle等。 3. 应用安全设置:配置应用的角色和认证方式,如JaAS、LDAP集成。 九、启动与停止JBoss - 启动:`$JBOSS_HOME/bin/standalone.sh` -...

    JNDI连接池+单例模式+文件上传

    在IT行业中,JNDI(Java Naming and Directory Interface)是一种标准接口,用于在Java应用程序中查找和管理资源,如数据库连接池。连接池是优化数据库性能的重要手段,它通过复用已建立的数据库连接,避免了频繁...

    JBoss学习全集多本书整合

    在性能调优方面,学习如何监控和调整内存设置、线程池大小、数据库连接池等,可以帮助提升服务器的响应速度和稳定性。JBoss提供了丰富的监控工具,如JMX(Java Management Extensions)和Web管理控制台,使管理员...

    JBOSS中文文档 CSDN资源下载

    学习如何通过JNDI查找数据库连接池、邮件会话等服务是必要的。 5. **安全管理**:JBoss的安全特性包括用户角色、认证和授权。这部分会讲解如何设置用户、角色,以及如何使用JaAS(Java Authentication and ...

    proxool连接池配置详解

    Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,合理配置Proxool可以显著提高系统的性能和稳定性...

    JBoss转换到Weblogic

    在Java企业级应用开发中,开发人员往往选择开源的应用服务器如JBoss进行初期开发,而到了生产环境,考虑到稳定性和支持服务,商业应用服务器如BEA WebLogic Server可能更为合适。然而,由于不同应用服务器之间的差异...

    jboss-as-master

    7. **数据源和JMS队列/主题**:配置数据库连接池和消息传递系统。 【操作手册】 JBoss AS的操作手册通常包含以下内容: 1. **安装指南**:指导如何下载、解压并启动服务器。 2. **快速入门**:介绍如何部署一个...

    jboss教程——快速上手指南

    在JBoss中,你可以通过修改`standalone.xml`或`domain.xml`配置文件来设置JNDI绑定,例如数据库连接池。 7. **安全管理** JBoss提供了强大的安全管理机制,包括用户角色定义、权限分配等。你可以在`standalone/...

    jboss-wildfly14.0.1应用服务器

    2. 数据库连接池:合理设置数据库连接池大小,避免资源浪费和连接溢出。 3. 缓存配置:调整Infinispan缓存设置,提高数据访问速度。 4. 组件调优:针对特定的Java EE组件,如EJB、JMS等,进行性能优化。 五、安全...

    Deploying PowerBuilder Components to JBoss

    6. **JNDI(Java Naming and Directory Interface)**:在JBoss中,PowerBuilder组件可能会通过JNDI查找服务,例如数据库连接池或其他企业服务。 7. **数据访问**:PowerBuilder通常使用DataWindow控件进行数据库...

    c3p0数据连接池

    - **调试和解决问题**: 客户端应用配置、避免内存泄漏等。 - **命名配置**: 用户自定义配置、混合命名等。 - **通过 JMX 配置和管理**: c3p0 配置。 - **日志配置**: 日志级别和输出等。 #### 性能 c3p0 在设计上...

    hibernate4 jar包

    3. **mchange-commons-java-0.2.3.4.jar**:这是 C3P0 连接池的依赖库,提供了数据库连接池管理的基本功能。 4. **antlr-2.7.7.jar**:ANTLR 是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二...

    jboss 简介

    这可能涵盖了数据库连接池的配置、分布式缓存的使用、以及定制的安全策略等。 **企业命名上下文(ENC)** 企业命名上下文(Enterprise Naming Context, ENC)是JBoss中的一种特殊命名上下文,它为每个应用程序组件...

    java中数据库的布置

    而不仅仅是直接使用`DriverManager`,在大型项目中,通常会使用`DataSource`接口,它提供了更高级的功能,如连接池管理,可以提高性能和资源利用率。Apache的Commons DBCP和C3P0,以及应用服务器如Tomcat和JBoss...

    JBOSS EJB3.0实例教程

    - 包括数据库连接池的配置、连接URL、用户名密码等。 **6.2.1 MySql数据源的配置** - 配置MySql数据库的数据源。 - 设置连接驱动、连接URL、用户名和密码等。 **6.2.2 MsSqlServer2000数据源的配置** - 配置...

    Oracle数据库WEB开发指南.rar

    11. **Web应用部署**:在生产环境中,开发者需要知道如何配置Oracle数据库连接池,如C3P0或HikariCP,以及如何在应用服务器(如Tomcat、JBoss)中部署Web应用。 12. **备份与恢复策略**:定期备份Oracle数据库并...

    Jboss7快速入门手册

    4. **配置数据源**:数据源的配置是通过修改`standalone.xml`或`domain.xml`中的相关节点完成的,这些配置包括数据库连接参数、池大小等。 5. **配置日志**:日志配置可以通过修改`logging.properties`文件来实现,...

    JBoss Application Server4.2 Getting_Started_Guide

    - **5.1 数据库**:讨论了如何配置数据库连接,包括创建数据库模式、使用HSQLDB等步骤。 - **6.1 部署应用**:介绍了部署过程中的关键步骤。 #### 九、使用Seam框架 - **5.1 数据模型**:介绍如何设计数据模型以...

Global site tag (gtag.js) - Google Analytics