`

解决Tomcat数据连接池无法释放

阅读更多

近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上 有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会 再次出现无法登录的情况。


今天上午,开发人员小毛又找到我,要我协助将这个问题根治一下,拖太久用户难保不投诉。

简单分析了一下,每次Reload一下就能解决无法登录的情况,自然而然就想到是不是session有问题呢?于是到Tomcat的manager界面看了下,发现并没有出现session粘滞暴涨的情况。

本来可以打开jconsole看看的,正好想起了之前用过的Tomcat检测工具:probe,于是直接从其他机器上scp了一个probe.war,丢到了webapps下面自动部署。

部署完之后,打开了probe网页管理后台发现smc项目的实时数据库连接数很高,而且只增不减!这个系统的数据池大小设置为200,此时已经是100+了,而且一直只升不降。好吧,当数据连接数达到200时,问题肯定会再次出现的。

于是我将这个问题告诉了小毛,要他自己去修改连接池释放机制(这里用的是项目单独设定的参数)。他说试过了,没有用,问下我有没有办法。

我这人记性一直欠佳,也很少去记忆一些参数设置,问我么?还我也只能问BD、GG了。。。

最终在强大的搜索引擎的帮助下,找到了相关参数说明,通过参考修改后成功解决了问题!

Tomcat连接池无法释放的解决方法:

编辑项目的连接池配置文件:context.xml,参考下面的【数据库连接设置】参数说明,按照实际情况调整好各项数值,尤其是Maxidle和maxActive。并记得加上removeAbandoned=true 相关释放参数即可,我们这最终设置好的context.xml如下所示:


数据库连接设置参考:

附上作者的原文说明:

在配置DBCP连接池时,主要难以理解的主要有:removeAbandoned 、logAbandoned、removeAbandonedTimeout、maxWait这四个参数,设置了rmoveAbandoned=true 那么在getNumActive()快要到getMaxActive()的时候,系统会进行无效的Connection的回收,回收的 Connection为removeAbandonedTimeout(默认300秒)中设置的秒数后没有使用的Connection,激活回收机制好像 是getNumActive()=getMaxActive()-2。

如果开启"removeAbandoned",那么连接在被认为泄露时可能被池回收. 这个机制在(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时被触发.

举例:当maxActive=20, 活动连接为18,空闲连接为1时可以触发"removeAbandoned".但是活动连接只有在没有被使用的时间超过"removeAbandonedTimeout"时才被删除,默认300秒.在resultset中游历不被计算为被使用.

logAbandoned=true的话,将会在回收事件后,在log中打印出回收Connection的错误信息,包括在哪个地方用了Connection却忘记关闭了,在调试的时候很有用。

在这里私人建议maxWait的时间不要设得太长,maxWait如果设置太长那么客户端会等待很久才激发回收事件。

通过仁兄的资料,加深了我对连接池参数的理解,非常感谢!特附上原文地址:DBCP连接池配置参数说明及优化 ,以示尊重!

分享到:
评论

相关推荐

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

    一旦配置完成,我们可以通过编程方式从连接池中获取和释放连接,例如使用JNDI(Java Naming and Directory Interface)查找数据源,然后调用`getConnection()`方法创建连接。 性能测试是评估连接池效率的关键步骤。...

    Tomcat中连接池和数据源的使用.pdf

    标题与描述中的知识点聚焦于Tomcat中连接池和数据源的使用,这涉及到数据库连接管理、资源优化以及服务器配置等方面的重要技术细节。以下是对这些关键概念的深入解析: ### 数据库连接池的作用 数据库连接是一种...

    tomcat连接池应用例子

    标题“Tomcat连接池应用例子”指的是在Java Web开发中,使用Tomcat内置的数据源(连接池)来管理与MySQL数据库的连接。Tomcat作为流行的Java应用服务器,提供了高效的连接池服务,帮助开发者优化数据库操作的性能和...

    Tomcat数据库连接池

    这些连接池都提供了高效的连接管理策略,如连接的自动获取与释放、空闲连接检测和超时处理等。 1. **Apache DBCP**: 这是Apache的一个开源项目,提供了基本的数据库连接池功能。配置DBCP通常涉及以下几个步骤: - ...

    tomcat6.0连接池

    8. **监控和诊断**:通过AOP库(如AspectJ)和日志记录工具,可以监控连接池的使用情况,如获取连接和释放连接的时间,以及连接池的状态信息,这对于诊断和优化系统性能至关重要。 综上所述,配置Tomcat 6.0连接池...

    tomcat 数据库连接池配置的jar包

    为了高效管理数据库连接,Tomcat提供了连接池(Connection Pool)的功能,允许应用程序重复使用已经建立的数据库连接,从而减少创建和关闭连接的开销,提高系统的性能和响应速度。在Tomcat中实现数据库连接池,主要...

    tomcat6.0数据库连接池驱动

    Tomcat 6.0数据库连接池驱动的使用,涉及到的主要知识点包括:数据库连接池的概念与作用,Tomcat内置的数据源实现(DBCP和C3P0),数据源的配置方法,JNDI的使用,以及在Java代码中获取和释放数据库连接。...

    数据连接池有用的jar包

    确保正确选择并引入了对应版本的jar包后,开发者就可以在代码中配置数据连接池,如设置最大连接数、最小连接数、超时时间等参数,并通过连接池获取和释放数据库连接,从而优化数据库操作的性能。 在使用数据连接池...

    tomcat5连接池配置实例

    ### Tomcat5连接池配置详解 #### 一、概述 在Tomcat服务器中,连接池是一种重要的资源管理机制,主要用于管理数据库连接。合理地配置连接池可以极大地提高系统的响应速度和资源利用率。本文将详细介绍Tomcat5连接...

    Tomcat数据库连接池的配置方法总结.docx

    数据库连接池正是针对这个问题提出的,负责分配、管理和释放数据库连接,允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。 在 Tomcat 中,可以通过 conf/context.xml 文件来配置数据库连接池,...

    tomcat配置数据库连接池

    2. 监控与日志:开启连接池的日志输出,监控连接池状态,如连接的创建、释放、空闲等,以便及时发现和解决问题。 3. 销毁连接:在应用关闭时,确保正确关闭数据源,释放资源。 总结,配置Tomcat数据库连接池是Java ...

    Tomcat配置连接池

    ### Tomcat配置连接池知识点详解 #### 一、Tomcat与数据库连接池的基本概念 - **Tomcat**:Apache Tomcat是一款开源的轻量级Web应用程序服务器,在中小型系统和并发访问用户不是特别多的场合下被普遍使用。它是...

    java 数据库 连接池驱动.rar

    - 获取和释放连接:通过数据源对象的getConnection()方法获取连接,使用完毕后调用Connection的close()方法,实际上将连接返回给连接池,而非真正关闭。 4. **连接池的优缺点** 优点: - 资源复用,提高性能。 ...

    Tomcat中配置数据源连接池

    在Java Web应用中,Tomcat作为一款流行的Servlet容器,提供了数据源连接池的配置功能,以便高效管理和复用数据库连接。本篇文章将详细介绍如何在Tomcat中配置数据源连接池,涉及的主要知识点包括: 1. **数据源配置...

    Tomcat6连接池两种连接方式(含两个例子)及详细步骤及使用的包

    本篇文章将详细讲解在Tomcat6中实现连接池的两种主要方式,以及如何配置和使用它们。 ### 第一种配置方式:局部数据源 局部数据源适用于那些仅在一个Web应用中使用的数据库连接。配置步骤如下: 1. **下载连接池...

    Tomcat连接池配置

    为了解决这一问题,提高应用程序的效率,引入了数据库连接池的概念。连接池可以预先创建多个数据库连接,并维护这些连接,当应用程序需要访问数据库时,可以直接从连接池中获取一个空闲的连接,而不需要每次都重新...

    tomcat下面配置连接池

    在Tomcat中配置连接池,首先需要在`context.xml`文件中定义数据源。具体配置如下: ```xml auth="Container" type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" ...

    一个简单dwr的使用例子,tomcat数据库连接池

    - 记得在完成数据库操作后,释放连接回连接池。 6. **实现Ajax交互**: - JavaScript触发事件,如按钮点击,调用DWR方法,发送请求到服务器。 - 服务器端的Java方法执行,处理数据库操作。 - 数据库操作完成后...

Global site tag (gtag.js) - Google Analytics