今天早上一到客户那里,气氛非常紧张,都在忙碌着处理问题,一看系统不行了,马上选择重新启动,更郁闷的是服务竟然启动不起来了,报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拒绝响应的安全机制。
还是自己做个压力测试进行一下判断吧,判断结果后续发出。
分享到:
相关推荐
在企业级应用开发中,经常需要处理来自多个数据源的数据,比如不同的数据库或者数据库的不同分片。MyBatis-Plus(简称MP)是MyBatis的扩展,它提供了丰富的功能,包括多数据源的支持,使得开发者可以更方便地管理多...
8. **安全性考虑**:处理多数据源时,要注意权限隔离,避免在一个数据源中泄露另一个数据源的信息。同时,合理分配读写数据源,提高系统并发处理能力。 通过以上步骤,你可以成功地在SSM项目中实现多数据源配置,以...
在Spring Boot项目中实现多数据源动态切换是一项高级特性,能够使应用根据不同业务需求访问不同的数据库,从而实现服务的解耦和数据库操作的优化。该技术的关键在于如何在同一个应用中配置和使用多个数据源,以及...
### WebLogic 数据源配置详解 #### 一、新建数据源 **步骤1:登录WebLogic控制台** 在开始配置之前,首先需要登录到WebLogic Server的管理控制台。WebLogic Server控制台是进行各种配置的核心界面,通过它可以...
### JasperReport中使用多个数据源的方法详解 #### 场景背景 在报表开发过程中,有时我们需要在一个报表中展示不同来源的数据。例如,在同一份报告中同时呈现交叉表和饼状图,而这两部分数据可能源自不同的数据库表...
在SAP Business Warehouse (BW)系统中,数据源是数据集成和分析的核心组成部分。本文将深入探讨SAP BW数据源的介绍以及增强方法。 首先,SAP R3数据源是BW系统获取数据的主要来源之一。R3是SAP的ERP(企业资源规划...
当项目需求涉及到多个数据源时,如何在SpringMVC和MyBatis中配置和管理这些数据源就成为了一个关键问题。"springmvc_mybatis_多数据源"这个项目就是针对这种情况提供的一种解决方案。 首先,我们来看SpringMVC如何...
### ArcGIS教程:如何批量修复MXD地图数据源 #### 引言 在使用ArcGIS进行地理信息系统(GIS)操作时,经常会遇到打开地图后无法显示任何内容的情况,此时地图图层前通常会出现红色感叹号图标。这种情况主要是由于...
在IT行业中,数据库管理是核心任务之一,而动态数据源技术则是实现多数据库灵活切换的重要手段。本项目涉及的关键技术是"Mybatis-Plus"与"动态数据源"的结合使用,以及一系列相关的配置和扩展。下面将详细阐述这些...
《Spring Boot多数据源(支持Spring声明式事务切换和回滚)》 Spring Boot多数据源技术是构建高效、灵活的多租户SaaS架构的关键。在本文中,我们将深入探讨如何实现动态数据源切换,支持Spring声明式事务管理,并讨论...
在这种情况下,Spring MVC框架提供了一种灵活的方式来处理多数据源的连接。本文将深入探讨如何在Spring MVC项目中实现多数据源的动态切换,以Oracle数据库为例。 首先,我们需要在配置文件中定义多个数据源。在...
本示例"mysql和Oracle的多数据源配置demo"聚焦于如何在SpringBoot框架下同时集成和管理MySQL与Oracle这两种不同的数据库系统,以实现多数据源的配置。这在需要处理不同数据库类型或者需要实现数据冗余和故障切换的...
Spring Boot配置动态数据源访问多个数据库实现代码详解 通过Spring Boot配置动态数据源访问多个数据库可以实现数据库的动态增删和数量无限的支持,下面将详细介绍该实现代码的知识点。 数据源配置管理 在Spring ...
在企业级应用开发中,数据源管理是至关重要的部分,特别是在大型系统中,往往需要连接多个不同的数据库以满足业务需求。本项目“Spring+SpringMVC+Mybatis动态链接多数据源”旨在实现一个灵活、可扩展的数据源切换...
在Spring Boot应用中,多数据源配置是一项关键的技术,它允许我们同时管理多个数据库,比如主库和从库,或者不同类型的数据库。本教程将详细阐述如何在Spring Boot项目中实现这一功能,从数据源配置、实体管理到...
"动态数据源之分库解析1(固定N数据源,切换多数据源)"这个主题正是针对这样的场景,探讨如何在运行时动态地切换和管理多个数据库连接。下面将详细讲解相关知识点。 1. **动态数据源**:动态数据源是在运行时能够...
在实际开发中,我们经常会遇到需要自定义数据源的情况,这时JasperReport提供了使用JavaBean作为数据源的功能。本实例将详细介绍如何通过自定义JavaBean数据源来生成报表。 首先,理解JavaBean是一种符合特定规范的...
在IT行业中,数据库管理是核心任务之一,尤其是在大型企业级应用中,可能需要连接到多个数据源以满足不同业务需求。Jeecg是一款强大的企业级快速开发平台,它支持多数据源配置,允许用户根据业务场景灵活切换和管理...
整理的分布式事务 及动态数据源切换 基于数据库XA协议 maven 包可直接使用 maven 引入路径: <groupId>com.maple</groupId> <artifactId>DCSDataSourcesServer <version>0.0.1-SNAPSHOT 事务及数据源标签...
WAS 数据源配置及常见问题处理 WAS(WebSphere Application Server)是一种流行的 Java EE 应用服务器,配置数据源是 WAS 中一个非常重要的步骤。本文将详细介绍 WAS 配置数据源的操作过程,并总结出现的问题和解决...