`
阅读更多
    今天早上一到客户那里,气氛非常紧张,都在忙碌着处理问题,一看系统不行了,马上选择重新启动,更郁闷的是服务竟然启动不起来了,报webwork的配置文件出现问题,昨天晚上正好做一次升级,难道升级出了什么问题,但是昨天升级完成以后系统启动服务正常啊,而且他们在刚上班的时间还是可以用的,怎么会这么呢,让领导说一顿,看着升级的那个同事感觉很不可思议,所以打算查一下原因,进行了分析活动。
    首先查看日志,真多啊,竟然看了40000行日志在输出
首先输出:DBCP object created 2008-01-22 09:20:33 by the following code was never closed:和详细的日志,
然后又出现:
java.sql.SQLException: Not in transaction.
        at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:373)
        at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3208)
        at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3518)
        at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2353)
        at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2269)分析出一点问题,我配置的dbcp数据源的方式是
<property name="removeAbandoned"><value>true</value></property>
<property name="removeAbandonedTimeout"><value>60</value></property>
<property name="logAbandoned"><value>true</value></property>
如果超过最大数以后,系统自动回收过期的连接,由于当时系统的并发量比较大,造成有些还没有结束的连接被回收,然后就出现了第二个地方的日志,看来就是这个地方的问题了,关键就是怎么处理这样的问题呢,然后从google查询思路。
首先,看到了robbin的一个帖子的回复说是dbcp不稳定,建议使用c3p0,而且看到hibernate的官方网站Gavin的文章也说是由于dbcp数据源有问题,hibernate3删除了内置的支持。问题看来这个地方有点眉目,dbcp有一定的问题,关键点就是AbandonedObjectPool参数的设置,问题的关键点就是他自动关闭数据库连接造成的,如果不关闭就可以了,这个地方是不稳定的,只是建议在开发的时候使用。所以可以采用removeAbandoned为false,可以解决这个问题,还就是需要扩大一下最大连接数。
其次就是更换dbcp了,可以采用c3p0的方式。
   至于上面服务启动不来,我的分析就是服务启动以后,配置文件发生了覆盖,这个应该是管理不完善造成的了,给自己一个理由下台,哈哈。
   很多人建议,如果必须使用dbcp,那就用,如果不是,就更换成cp,
也有人在blog上这样写道:
使用DBCP连接池后访问速度提高了100-150%,但是实验表明,如果负载压力达到实际负荷的10倍以上,即超出内设的最大连接数10倍左右,DBCP原因不明地崩溃,并常常不能最终恢复服务。原因之一是由于在高负载下,DBCP把已经关闭或过时的连接返回给呼叫者,造成流溢出,从而令所有IO进程悬挂。唯一的办法就是重启tomcat。 解决办法是在得到连接后先检验连接是否关闭,并最后有防止DDOS拒绝响应的安全机制。
还是自己做个压力测试进行一下判断吧,判断结果后续发出。
分享到:
评论
2 楼 wufeipeng2001 2018-03-07  
结果呢?
1 楼 ouxiaolei 2008-08-19  
学了很多,谢谢.

相关推荐

    SpringBoot配置多数据源实现动态切换数据源

    在企业级应用开发中,数据源的管理是一个关键部分,特别是在需要访问多个数据库的应用中。SpringBoot框架以其简洁的配置和强大的功能深受开发者喜爱。本文将深入探讨如何在SpringBoot项目中配置多数据源,并实现数据...

    mybatis-plus多数据源/动态数据源配置示例代码

    在企业级应用开发中,经常需要处理来自多个数据源的数据,比如不同的数据库或者数据库的不同分片。MyBatis-Plus(简称MP)是MyBatis的扩展,它提供了丰富的功能,包括多数据源的支持,使得开发者可以更方便地管理多...

    SpringBoot+druid+多数据源示例

    在现代企业级应用开发中,数据源管理是一个关键部分,特别是在需要处理来自多个数据库的数据时。SpringBoot作为轻量级的Java开发框架,为开发者提供了便捷的自动化配置和快速开发能力。而Druid是一个功能强大的...

    SpringMVC配置多数据源实战

    在SpringMVC框架中配置多数据源是一项常见的需求,尤其在大型企业级应用中,由于业务的复杂性,往往需要连接不同的数据库以满足不同模块的需求。以下将详细讲解如何实现这一功能。 首先,理解数据源(DataSource)...

    springboot-AOP实现多数据源动态切换(Druid连接池)

    在Spring Boot项目中实现多数据源动态切换是一项高级特性,能够使应用根据不同业务需求访问不同的数据库,从而实现服务的解耦和数据库操作的优化。该技术的关键在于如何在同一个应用中配置和使用多个数据源,以及...

    weblogic数据源配置

    ### WebLogic 数据源配置详解 #### 一、新建数据源 **步骤1:登录WebLogic控制台** 在开始配置之前,首先需要登录到WebLogic Server的管理控制台。WebLogic Server控制台是进行各种配置的核心界面,通过它可以...

    SAP BW 数据源介绍及增强

    在SAP Business Warehouse (BW)系统中,数据源是数据集成和分析的核心组成部分。本文将深入探讨SAP BW数据源的介绍以及增强方法。 首先,SAP R3数据源是BW系统获取数据的主要来源之一。R3是SAP的ERP(企业资源规划...

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多数据源。在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两...

    SpringBoot实现动态切换数据源(含源码)

    在Spring Boot应用中,动态切换数据源是一项关键功能,尤其在多数据库环境或者读写分离的架构中。这里我们将深入探讨如何使用`ThreadLocal`和`AbstractRoutingDataSource`来实现这一目标。 `ThreadLocal`是Java提供...

    springmvc_mybatis_多数据源

    当项目需求涉及到多个数据源时,如何在SpringMVC和MyBatis中配置和管理这些数据源就成为了一个关键问题。"springmvc_mybatis_多数据源"这个项目就是针对这种情况提供的一种解决方案。 首先,我们来看SpringMVC如何...

    JasperReport中使用多个数据源的方法

    ### JasperReport中使用多个数据源的方法详解 #### 场景背景 在报表开发过程中,有时我们需要在一个报表中展示不同来源的数据。例如,在同一份报告中同时呈现交叉表和饼状图,而这两部分数据可能源自不同的数据库表...

    VBA由图表获取数据源

    在探讨“VBA由图表获取数据源”这一主题时,我们深入分析VBA(Visual Basic for Applications)在Microsoft Office应用程序中的强大功能,特别是在Excel中如何利用VBA代码从图表中提取数据源信息。这一能力对于自动...

    ArcGIS教程:如何批量修复MXD地图数据源

    ### ArcGIS教程:如何批量修复MXD地图数据源 #### 引言 在使用ArcGIS进行地理信息系统(GIS)操作时,经常会遇到打开地图后无法显示任何内容的情况,此时地图图层前通常会出现红色感叹号图标。这种情况主要是由于...

    Spring Boot多数据源(支持Spring声明式事务切换和回滚).pdf

    《Spring Boot多数据源(支持Spring声明式事务切换和回滚)》 Spring Boot多数据源技术是构建高效、灵活的多租户SaaS架构的关键。在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论...

    BW增强数据源的两种方法

    BW增强数据源的两种方法 BW(Business Warehouse)是一种业务智能解决方案,提供了强大的数据分析和报表生成功能。然而,在实际应用中,我们经常会遇到系统标准的数据源或自建的数据源无法满足要求的情况,这个时候...

    springmvc多数据源连接

    在这种情况下,Spring MVC框架提供了一种灵活的方式来处理多数据源的连接。本文将深入探讨如何在Spring MVC项目中实现多数据源的动态切换,以Oracle数据库为例。 首先,我们需要在配置文件中定义多个数据源。在...

    DBF数据源驱动

    DBF数据源驱动是针对DBF格式文件的一种接口,它允许应用程序与这些基于dBase的数据库进行交互。DBF文件是早期的数据库文件格式,常见于FoxPro、Visual FoxPro等系统中,它们包含了结构化的表格数据。在现代环境中,...

    mysql和Oracle的多数据源配置demo

    本示例"mysql和Oracle的多数据源配置demo"聚焦于如何在SpringBoot框架下同时集成和管理MySQL与Oracle这两种不同的数据库系统,以实现多数据源的配置。这在需要处理不同数据库类型或者需要实现数据冗余和故障切换的...

    jasperReport自定义javabean数据源实例

    在实际开发中,我们经常会遇到需要自定义数据源的情况,这时JasperReport提供了使用JavaBean作为数据源的功能。本实例将详细介绍如何通过自定义JavaBean数据源来生成报表。 首先,理解JavaBean是一种符合特定规范的...

    根据用户动态切换数据源java代码 dynamicds

    在Java开发中,特别是在SpringBoot框架下,动态数据源是一个重要的功能,它允许应用程序根据不同的业务需求或用户权限切换到不同的数据库。动态数据源的实现能够极大地提高系统的灵活性和可扩展性,使得一个应用可以...

Global site tag (gtag.js) - Google Analytics