`

Tomcat数据库连接池参数测试

阅读更多

 刚刚进入公司,实习生一个,被分配任务找出Oracle数据库连接失败的原因。
 第一直觉,数据库连接操作没有关闭,导致数据库连接被阻塞。
 查看数据库SQL语句如下:
  select MACHINE,username from v$session order by MACHINE  ---查看当前连接数据库的机器和用户名
  select count(*) from v$process --当前数据库被连接的次数
  select value from v$parameter where name = 'processes' --数据库允许的最大连接数

 发现数据库最大连接数为150(应该是Oracle默认连接数大小,未深研究)。而当前连接数已经为150,阻塞已成必然。
 查看代码,果然发现许多conn未被关闭。在某个小角落阻塞这数据库连接。。。
 
 既然找到问题,说干就干,关掉这些connection对象。全部关闭后,发现阻塞的情况得到了环境,然而网站的性能仍然不高。
 调查发现,是因为我们的系统要随时向数据库里写入一些log信息,频繁的与数据库建立连接、断开连接确实很耗费性能。
 这样子一定不可以满足需求,没办法,改! 突然想到,学校不是讲过连接池这个东西嘛,干嘛不用呢。
 找来找去,发现采用Tomcat自带的一个数据库连接池,应该可以满足需求。配置简单,性能还可以得到保证。于是google,baidu了一圈,最后Tomcat 6.0的方法如下:
 在tomcat的安装目录小找到conf/context.xml文件,打开后,在<Context>中加入如下的配置: 
  <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"
   maxActive="300" maxIdle="30" maxWait="10000" username="****" password="****"
   driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@***.**.**.***:1521:databasename"
   removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
  />
 具体含义可以网上google一些,相信具体含义可以找到。重启tomcat后,连接池的配置就已经生效了。
 

下一步就是获取连接池中的connection对象了。
java 具体代码如下:
  Context context = new InitialContext();
  DataSource ds =(DataSource) context.lookup("java:/comp/env/jdbc/oracleds"); 
  conn = ds.getConnection(); 
 在导入需要的Oracle驱动包后,你就可以正常使用Tomcat连接池中被管理的connection对象了。
 在用完的时候,正常调用conn.close()方法就可以了。
 
 在做完这个Task的过程中,我做了几个测试。用来理解数据库配置中的几个参数的作用。
 准备工作:
 a.把参数按如下方式修改:maxActive="15" maxIdle="10" removeAbandonedTimeout="20"
 b.使用一款叫做LambdaProbe的工具监测Tomcat的状态。
 测试一:
  测试目的:找到Abandoned Connection是指哪一类的connection。
  1.在JSP中打开一个数据库连接,不关闭。
  刷新页面13此,发现数据库连接数为13,20秒过后,发现连接数仍未13.
  2.修改上面JSP页面,使用完毕后,调用close()方法,关闭数据库连接。
  快速刷新13次,发现数据库连接为13。20秒后,发现连接数变为10(默认空闲连接为10)。说明一部分连接被Tomcat连接池回收。
  由此可见,所谓的AbandonedConnection不是指未关闭的connection,而是指那些曾经连接,后来关闭的close。
 测试二:
  测试目的:找到Tomcat连接池回收那些没有关闭的数据库连接的时刻。
  1.在JSP中打开一个数据库连接,不关闭,即不调用conn.close()方法。
  刷新页面13此,发现数据库连接数为13,20秒过后,发现连接数仍未13.
  2.在JSP中打开一个数据库连接,不关闭。
  刷新页面16此,发现数据库连接数为15,20秒过后,发现连接数为10.查看logs/stdout_20100816.log输出日志:可以看到具体哪个页面报出异常。
  由此可见,Tomcat对于那些没有释放的连接。也会采取一定的处理,但是不是马上处理,在连接数达到maxActive所规定的值之前,所有未释放的连接都会被标记为忙连接。当达到maxActive时,如果继续想Tomcat连接池申请连接
  Tomcat会报出异常,并在stdout.log日志中输出。从异常中可以查看到具体是哪个页面没有释放。Tomcat抛出异常后,连接池会强制回收那些连接未释放的连接,并使连接池中的连接数量保持在maxIdle所规定的数量。
 

小提示:一个查看Tomcat当前状态很有用的工具叫做:LambdaProbe。很好用噢,网上可以下载到所需probe.war和相关使用方法。
 
 

2
0
分享到:
评论

相关推荐

    tomcat数据库连接池配置

    ### Tomcat 数据库连接池配置详解 在Java Web开发中,Tomcat作为一款广泛使用的应用服务器,其数据库连接池配置是十分重要的一个环节。合理的配置能够显著提高应用程序的性能和稳定性。本文将以MySQL数据库为例,...

    Tomcat数据库连接池

    Tomcat数据库连接池,也称为JDBC连接池,是Tomcat服务器中的一个关键组件,用于管理和优化数据库连接的使用。它在应用程序需要频繁与数据库交互时扮演着重要角色,通过复用已建立的数据库连接,避免了每次请求数据库...

    tomcat_连接池数据库密码加密解密方法

    其中,数据库连接池作为应用程序与数据库之间的桥梁,扮演着关键角色。然而,当数据库的用户名和密码直接硬编码在配置文件(如Tomcat的`server.xml`)中时,这些敏感信息容易被泄露,从而构成安全隐患。因此,实现...

    Tomcat数据库连接池的配置和实例

    ### Tomcat数据库连接池的配置和实例 #### 一、引言 在现代Web应用开发中,数据库连接池是一项至关重要的技术。它能够显著提高应用程序的性能和响应速度,通过复用已经建立好的数据库连接来避免频繁创建和销毁连接...

    Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置

    ### Tomcat5的数据库连接池配置详解 #### 引言 在Java Web开发中,数据库连接池是一项关键的技术,能够显著提升应用性能和资源利用效率。对于Tomcat5这一历史较为悠久但依然在某些场景中活跃的服务器软件,正确...

    tomcat中配置数据库连接池

    Tomcat 中配置数据库连接池 在 Tomcat 服务器中配置数据库连接池是一个非常重要的步骤,它可以提高应用程序的性能和可靠性。在这篇文章中,我们将详细介绍如何在 Tomcat 目录下面的 Context.xml 配置文件中配置...

    oracleXE-Tomcat 数据库连接池实例

    在Java Web开发中,数据库连接池是一种重要的技术,它能有效地管理和复用数据库连接,提高系统的性能和效率。本实例将介绍如何在Oracle XE数据库与Tomcat之间配置连接池。 首先,我们需要了解连接池的基本概念。...

    web中常用数据库连接池

    5. Tomcat JDBC Connection Pool:Tomcat服务器自带的数据库连接池,它是一个完全符合JDBC 4.0规范的连接池实现,支持JNDI绑定和各种数据库驱动。 在使用数据库连接池时,我们需要关注以下几点: 1. 配置参数:...

    tomcat6配置数据库连接池代码

    在Tomcat6中,为了实现高效的数据访问,通常会使用数据库连接池来管理数据库连接。连接池允许程序在需要时获取数据库连接,使用完毕后归还,而不是每次连接和断开都创建新的连接,从而提高性能并减少资源消耗。 ...

    Tomcat6配置连接池

    本文将详细介绍如何在Tomcat 6中配置数据库连接池,并通过实际案例进行演示。 #### 二、配置步骤详解 ##### 2.1 修改`server.xml`文件 首先,我们需要打开Tomcat安装目录下的`conf`文件夹,找到`server.xml`文件...

    补充 数据库连接池.ppt

    【数据库连接池】是软件开发中用于管理数据库连接的一种技术,旨在提高数据库操作的效率和资源利用率。在传统的JDBC数据库编程中,每个数据库操作都需要建立、使用和关闭数据库连接,这种模式存在明显的性能瓶颈和...

    tomcat连接池的配置与性能测试

    `Tomcat连接池`是Java应用服务器中用于管理数据库连接的一种机制,它的目的是提高数据库连接的复用性,减少创建和销毁连接的开销,从而提升应用的性能和响应速度。Tomcat内置了多种连接池实现,如Apache的Commons ...

    数据库连接池-jar包

    数据库连接池是现代应用程序开发中的重要组成部分,尤其是在处理大量并发请求时。它是一种管理数据库连接的机制,通过复用已存在的数据库连接,避免了频繁创建和销毁连接带来的性能开销和资源浪费。jar包(Java ...

    tomcat的数据库连接池的设置

    在IT行业中,数据库连接池是优化应用程序性能的关键技术之一,特别是在使用Java的Web服务器如Tomcat时。数据库连接池管理数据库连接,使得多个用户可以共享这些连接,而不是为每个请求创建新的连接,从而提高效率并...

    tomcat连接池配置

    Tomcat内置了两个常用的数据库连接池实现:C3P0和Apache DBCP。C3P0是一款功能强大的连接池,支持多数据源,具有自动测试连接、自动回收等功能。Apache DBCP是Apache的一个项目,它基于Jakarta-pool,提供了一个基本...

    tomcat配置INFORMIX数据库的连接池(测试成功)

    ### Tomcat配置INFORMIX数据库连接池 在Java Web应用开发过程中,经常需要与数据库进行交互,而数据库连接池作为优化数据库访问效率的关键组件,在实际项目中占据着重要的位置。本文将详细介绍如何在Tomcat服务器中...

    数据库连接池驱动程序包

    数据库连接池是现代应用程序开发中的重要组成部分,它有效地管理和优化了数据库连接的创建、分配和回收,从而提高系统的性能和稳定性。在这个“数据库连接池驱动程序包”中,包含了三种主流的连接池实现:C3P0、DBCP...

Global site tag (gtag.js) - Google Analytics