`
pretty_frog
  • 浏览: 5500 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

连接池参数测试结果分析

阅读更多
连接池属性测试
1.initialSize 属性
initialSize属性是在tomcat6.0后,连接池添加的属性,它是定义服务器启动初始化几个连接,默认情况下是0即服务器启动时不初始化连接。
2.maxActive 属性
表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独,供一个应用使用,通过设置maxActive参数可以避免某个应用无限制的获取连接对其他应用造成影响,如果一个数据库只是用来支持一个应用那么maxActive理论上可以设置成该数据库可以支撑的最大连接数。maxActive只是表示通过连接池可以并发的获取的最大连接数。
3.maxIdle 属性(maxActive=5,maxIdle=3)
如果在并发时达到了maxActive=5,那么连接池就必须从数据库中获取5个连接来供应用程序使用,当应用程序关闭连接后,由于maxIdle=3,因此并不是所有的连接都会归还给数据库,将会有3个连接保持在连接池种中,状态为空闲,以便下次使用时重复利用,这也是连接池真正发挥作用的地方。
4.minIdle 属性
最小默认情况下并不生效,它的含义是当连接池中的连接少于minIdle,系统监控线程将启动补充功能,一般情况下不启动补充线程。
5.testOnBorrow="true" 和 validationQuery="select 1" 的属性设置
我们知道数据库连接从本质上架构在tcp/ip连接之上,一般情况下web服务器与数据库服务器都不在同一台物理机器上,而是通过网络进行连接,那么当建立数据库连接池的机器与数据库服务器自己出现网络异常时,保持在连接池中的连接将失效,不能够在次使用,传统的情况下只能通过重新启动,再次建立连接,通过设置以上两个参数,但应用程序从连接池中获取连接时,会首先进行活动性检测,当获取的连接是活动的时候才会给应用程序使用,如果连接失效,连接将释放该连接。validationQuery是一条测试语句,没有实际意义,现实中,一般用一条最为简单的查询语句充当。
6.removeAbandoned、removeAbandonedTimeout 和 logAbandoned 属性设置
有时粗心的程序编写者在从连接池中获取连接使用后忘记了连接的关闭,这样连池的连接就会逐渐达到maxActive直至连接池无法提供服务。现代连接池一般提供一种“智能”的检查,但设置了removeAbandoned="true"时,当连接池连接数到达(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时便会启动连接回收,那种活动时间超过removeAbandonedTimeout="60"的连接将会被回收,同时如果logAbandoned="true"设置为true,程序在回收连接的同时会打印日志。
removeAbandoned是连接池的高级功能,理论上这中配置不应该出现在实际的生产环境,因为有时应用程序执行长事务,可能这种情况下,会被连接池误回收,该种配置一般在程序测试阶段,为了定位连接泄漏的具体代码位置,被开启,生产环境中连接的关闭应该靠程序自己保证。

7.Tomcat dbcp数据库连接池,在tomcat部署多个应用时,在什么情况下连接池共享,什么情况下连接池不共享?
答:把连接池配置的resource放到context中连接池针对于每个应用独立,就是说tomcat在启动时,会针对每个应用建立配置的所有连接池,有几个应用,同一个连接池就会有几个。
如果配置连接池的resource放到全局resources里即GlobalNamingResources中,连接池是共享的。就是整个tomcat无论配置多少应用,整个tomcat在启动时,针对每个配置的连接池,只会生成一个,而且每个项目共享这个连接池。修改后的xml如下:
(GlobalNamingResources  在server.xml中)
<GlobalNamingResources>
     <Resource name="UserDatabase" auth="Container"
       type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
       pathname="conf/tomcat-users.xml" />
<Resource name="jdbc/test" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test" username="root"
password="root" maxActive="20" maxIdle="10" maxWait="1000" initialSize="10"/>
  </GlobalNamingResources>
以前是在context.xml的<context></context>标签中。具体如下:
<context>
<Resource name="jdbc/test" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test" username="root"
password="root" maxActive="20" maxIdle="10" maxWait="1000" initialSize="10"/>
  </context>
但是在设置全局连接池时,必须在context.xml 的context中进行引用,代码如下:
<context>
<ResourceLink name="jdbc/test" global="jdbc/test" type="javax.sql.DataSource"/>
</context>
8.连接池里的连接,是以堆栈类型的数据结构存储还是以队列类型的数据结构存储?
答:连接池里的连接是以堆栈的形成存储的,因为经过测试,先关闭返回的连接,是后被使用的,而后关闭返回的连接先被使用,符合堆栈的先进后出的原则。
测试的Connection对象的的地址顺序,如下:
a)获得一个连接,打印Connection对象地址,关闭连接,再获得下一个,我们会发现取的是个连接都是同一个。
代码:
for(int i=0; i<10; i++){
Connection conn = dataSource.getConnection();
System.out.println(i+": "+conn.getClass().getName()+"@"+   Integer.toHexString(conn.hashCode()));
conn.close();
}
结果:
0: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
1: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
2: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
3: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
4: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
5: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
6: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
7: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
8: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
9: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6
b)循环获得十个连接,将每个连接放到List集合cons里,不关闭释放这十个连接,先打印Connection对象地址。然后根据刚才放到cons里的顺序,逐个关闭设防连接,关完之后,再从连接池中获取十个连接不关闭释放,按照获取顺序,打印每一个Connection对象的地址,我们会发现,先释放的Connection对象,后没获得。
代码:
ArrayList<Connection> cons = new ArrayList<Connection>();
for(int i=0; i<10; i++){
Connection conn = dataSource.getConnection();
cons.add(conn);
System.out.println(i+":"+conn.getClass().getName()
+"@"+Integer.toHexString(conn.hashCode()));

}
for(int i=0; i<cons.size(); i++){
cons.get(i).close();
}
for(int i=0; i<10; i++){
Connection conn = dataSource.getConnection();
cons.add(conn); System.out.println(i+":"+conn.getClass().getName()
+"@"+Integer.toHexString(conn.hashCode()));
}
结果:
0: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1bfbfb8
1: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1c3e9ba
2: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@125d61e
3: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@10c6cfc
4: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@c72243
5: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@19a8416
6: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@155d3a3
7: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1b994de
8: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@dc9766
9: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@57e787
0: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@57e787
1: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@dc9766
2: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1b994de
3: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@155d3a3
4: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@19a8416
5: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@c72243
6: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@10c6cfc
7: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@125d61e
8: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1c3e9ba
9: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1bfbfb8
分享到:
评论
1 楼 天空之城 2012-06-25  
又学到了重要的信息。谢谢

相关推荐

    weblogic连接池配置数据库断掉重连的问题

    Weblogic 连接池配置数据库断掉重连的问题是一个非常重要的问题,需要进行详细的讨论和分析。在这个主题中,我们讨论了连接池配置的基本概念、断掉重连机制的原理、配置参数的解释等。通过了解这些知识点,我们可以...

    druid配置文档+

    1. 高效的数据库连接池:Druid 提供了一个高效、功能强大、可扩展性好的数据库连接池。 2. 监控数据库访问性能:Druid 内置提供了一个功能强大的 StatFilter 插件,能够详细统计 SQL 的执行性能。 3.数据库密码加密...

    论文研究-基于JDBC数据库连接池的自适应管理策略研究.pdf

    通过分析现有数据库连接池在参数配置、管理策略等方面的不足,提出一种自适应的连接池管理策略。从配置参数调整、设置监听线程和运行日志等管理方案的实施,弥补了现有连接池技术的不足。运行测试证明,自适应管理...

    系统软件需求清单及其技术参数

    * 可以提供资源管理的功能,使系统规模可调,具有集成的图形化监控工具对系统 JVM、线程池、连接池和 EJB 方法调用等系统资源进行监控 * 具有集成的图形化顾问工具,根据系统运行状况给出合理化的参数调整建议 * ...

    如何简单完成一个性能测试

    如果结果不达标,需排查可能的瓶颈,如服务器资源、队列、线程池、连接池、死锁、慢SQL等。 9. **分析定位**:基于监控数据,进行瓶颈分析和定位。这包括模块隔离、日志分析、内存分析、线程栈分析和代码跟踪。需要...

    锂电池制造过程.ppt

    HIOKI混合状态测试仪可以对电池的混合状态进行检测和分析,以确保电池的质量和性能。 此外,锂电池制造过程还需要考虑到安全和环保问题,例如使用环保friendly的原材料和制造过程,减少废弃物和污染的产生。 锂...

    性能测试用例模板2.doc

    - 测试用例中提及的DB参数可能涉及数据库连接池大小、缓存设置等,这些参数直接影响数据库处理请求的能力。同时,其它参数可能涵盖网络带宽、服务器配置等,这些因素都可能影响系统的整体性能。 5. 性能调优: - ...

    c3p0-demo:原始文件详解系列(五)------ C3P0的使用和分析(包括JNDI)

    本文将包含以下内容(因为篇幅范围,可根据需要选择阅读): c3p0的使用方法(入门案例, JDNI使用) c3p0的配置参数详解c3p0主要源码分析使用示例-入门需求使用C3P0连接池获取连接对象,对用户数据进行简单的增删改...

    Mycat从入门到精通视频教程

    Mycat从入门到精通视频教程目录介绍: 第1课 Mycat前世今生 Mycat的历史、背后的... 连接池源码分析 SQL路由模块分析 SQL执行模块分析 SQL汇聚模块分析 第14课 Mycat Catlet开发 Catlet原理 ShareJoin分析

    mycat从入门到跑路

    Mycat从入门到精通视频教程目录介绍: 第1课 Mycat前世今生 Mycat的历史、背后的团队、发展现状...连接池源码分析 SQL路由模块分析 SQL执行模块分析 SQL汇聚模块分析 第14课 Mycat Catlet开发 Catlet原理 ShareJoin分析

    记一次Tomcat卡死在 Deploying web application 步骤的问题.doc

    这个问题是由于连接池的参数没有写对引起的。 最终,为了快速解决问题,开发团队直接更换了数据库连接池,换成了Druid。这解决了问题,并且让生产环境中的项目成功部署。 在生产环境中部署web应用程序时,Tomcat...

    积分管理系统java源码-druid-demo:源码详解系列(六)------Druid的使用和分析

    积分管理系统java源码 目录 简介 druid是用于创建和管理连接,利用“池”的...编写druid.properties,设置数据库连接参数和连接池基本参数等 通过DruidDataSourceFactory加载druid.properties文件,并创建DruidDataSour

    网络书目信息抓取系统的设计与实现

    系统设置参数包括了数据库连接参数、数据库连接池设置参数、最大抓取线程数、超时时间、网页抓取器设置等。 数据存取器模块实现将抓取到的书目信息保存进数据库,或将保存在数据库的书目信息读取出来,以及数据库...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    基于MySQL的数据库中间件Meituan-DBProxy.zip

    后端连接池 自定义SQL拦截与过滤 流量分组与控制 丰富的监控状态 支持分表(分库版本正在内测中) Client IP限制 DBProxy对Atlas的改进 新增功能点 新增参数 ...

    基于BP神经网络的锂电池SOC估计.docx

    相邻两层的神经元之间经由连接权连接,每位连接权均有一个权值,同层之间的神经元没能连接回来。输入层中的输入方程运算后能获得一个输出方程,每一层的输出将视为下一层的输入。 BP网络模型参数确定 为了确定BP...

    基于 SpringBoot、Spring Security、JWT 的前后端分离权限管理系统+源代码+文档说明

    - 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如...

    服务器报500的原因

    服务器报500的原因分析 服务器报500错误是开发人员经常会遇到的问题之一...解决方法是调整数据库、修改连接池大小。 服务器报500错误的原因是多种多样的,需要开发人员细心分析和排除问题,以确保服务器的稳定运行。

    LTE簇优化培训资料整理解析.doc

    " "7 "测试笔记本电 "运行数据采集软件,连接测试设备 " " "脑 " " "8 "电子地图 "为路测提供地理信息 " "9 "测试车辆 "具备方便测试操作的空间与平台。具备点烟器或者蓄电" " " "池供电装置。 " 2.1簇优化的测试...

    m-fa8164.iso

    您可以轻松地将模块与数据连接起来,然后用众多的参数进行控制,从而建立一个可视化的处理网络。 这个网络的输出可以在3D查看器中显示。 有了Avizo 8 ISO,您可以处理复杂的数据,并轻松分析它们。 Avizo本质上是...

Global site tag (gtag.js) - Google Analytics