weblogic错误:Pool JDBC Data Source-0 is disabled解决
中间件应用服务器 2010-08-05 19:02:38 阅读337 评论0 字号:大中小 订阅
核心提示:有客户说,他们通过connection pool监控发现weblogic92连接池中当前连接数(current capacity)小于初始连接数(initial capacity)。从现象上来说,给客户的直觉是:连接池初始化有问题,没有帮助他们初始化他们需要的那么多连接。但他同时发现,几个connection
有客户说,他们通过connection pool监控发现weblogic92连接池中当前连接数(current capacity)小于初始连接数(initial capacity)。从现象上来说,给客户的直觉是:连接池初始化有问题,没有帮助他们初始化他们需要的那么多连接。但他同时发现,几个connection pool中,其他pool没有问题。拿到问题,我也怀疑这可能是weblogic的一个bug,但随后从客户发送过来的日志中发现出问题的connection被disable过。调查后发现问题的确和这个pool被disable过有关,那么为什么pool被disable后,会出现这样的问题呢?
首先我们看看这个pool为什么会被disable? 手工强制suspend连接池、数据库关闭、网络不稳定等因素都可能成为connection pool被disable的诱因。从客户的日志中,我能看到大量的如下异常,
1:java.net.SocketException: 管道已断开 (errno:32)
2:weblogic.common.resourcepool.ResourceDisabledException: Pool JDBC Data Source-0 is disabled, cannot allocate resources to applications.
根据上面的异常,首先跟客户确认是否存在过数据库关闭、强制disable connection的操作,这些都被客户否定了,那么最大可能的原因就是网络不稳定,网络是好时坏的话,很容易造成weblogic连接池中到database server的连接中断,从而导致connection pool被disable。
那么为什么连接中断会引起connection pool被disable呢?这里要谈到两个参数:CountOfTestFailuresTillFlush、CountOfRefreshFailuresTillDisable。这两个参数在weblogic连接池实现中由于控制是否、何时flush或disable连接池,两个都是指连续几次失败操作(test、refresh)后去flush或disable connection pool。注意:这是说的是连续,而不是间断,每次成功操作(test、refresh)后,这两个值都会被reset成0。默认情况下这两个值均为2,即连续失败3(2+1)次后,connection pool会被flush或disable。两者的区别在于,flush用于清空connection pool中的所有连接(通常都是中断的connection),当pool状态仍保持在running状态,而对于后者,connection pool将会变成suspend。前者对于客户端而言,还可以从pool中reserve connection,reserve时,weblogic会尝试重现创建连接,如果创建连接成功,那么客户端就可以拿到可用的连接。而对于一个处于suspend状态,客户端reserve connection的请求会直接被拒绝,收到的异常如下:
weblogic.common.resourcepool.ResourceDisabledException: Pool JDBC Data Source-0 is disabled, cannot allocate resources to applications
一个被disable的connection pool我们需要手工resume吗?比如数据库因为某些原因而突发关闭,数据库恢复后,我们是否需要手工去resume这个pool?不需要,weblogic内部实现了连接池的自我健康检查功能,对于disable的connection pool,weblogic会每隔5秒钟(DEFAULT_SCAN_UNIT)去做一次连接尝试(尝试创建一个物理连接,如果连接成功,那么这个连接会被直接放入连接池中,我们的问题就处在这儿),我们通过下面的复现过程来看看具体原因:
1:配置一个datasource,connection的连接数具体配置如下:
2:weblogic启动后,我们可以看到current capacity为15,此时connection pool刚被初始化,weblogic会根据initial capacity去创建相应数量的连接。此时如果我们关闭数据库,然后通过测试程序去获取连接,你会看到我们无法拿到连接(注意我们要选上TestOnReserve),重复三次,再次去监控connection pool。因为三次test失败后,connection pool会被disable(状态为suspend),如下:
3:重启database。由于weblogic内部实现了connection pool的自检功能,对于disabled的connection pool,weblogic每隔5秒钟去做一次连接尝试,如果连接创建成功,新建连接会被放入连接池,同时resume连接池。通过监控我们可以看到,连接池状态变成running,同时current capacity变成1,
4:启动多线程测试程序,模拟2个用户并发。第一个用户可以从connection pool中成功拿到连接,而第二个用户因为连接池的current capacity为1,无法直接从pool中拿到连接,这是连接池需要做扩展,而扩展的个数就是我们设定的capacity increment(20)。再来监控connection pool,我们就会看到连接池的current capacity为21,如下:
那么我们能不能通过参数配置不让connection pool不作disable呢? 我们前面所提到的两个参数:CountOfTestFailuresTillFlush、CountOfRefreshFailuresTillDisable,可以实现这样的要求:
- <internal-properties>
-
<property>
-
<name>CountOfTestFailuresTillFlush</name>
-
<value>10</value>
-
</property>
-
<property>
-
<name>CountOfRefreshFailuresTillDisable</name>
-
<value>20</value>
-
</property>
-
</internal-properties>
internal-properties用于定义一些weblogic internal的参数,这些参数无法在console上做配置。除了上面的这两个参数,我们还可以通过internal-properties配置如下几个参数:
TestConnectionsOnCreate
TestConnectionsOnRelease
HighestNumUnavailable
SecurityCacheTimeoutSeconds
通过上述分析,我们可以看到这个问题不是weblogic的bug,而是因为网络问题导致connection pool被disable,要彻底解决这个问题,可以通过网络分析工具查出网络问题,进而解决我们看到的这种现象。
分享到:
相关推荐
【K8 weblogic-CVE-2018-2628-getshell】是一个针对Oracle WebLogic Server的渗透测试工具,主要用于检验系统是否存在CVE-2018-2628漏洞并利用该漏洞获取shell权限。这个工具的使用应该严格限制在合法的安全测试环境...
weblogic-CVE-2023-21839-JNDIExploit-1.4-SNAPSHOT.jar
【K8 weblogic-CVE-2018-2628-getshell工具】是一款针对Oracle WebLogic服务器的渗透测试工具,主要用于检测和利用CVE-2018-2628安全漏洞获取服务器的shell控制权。这个工具集成了漏洞的详细利用过程,包括图片教程...
weblogic 序列化漏洞 CVE-2017-10271 版本 12.1.3.0.0
Weblogic wls-wsat组件反序列化漏洞(CVE-2017-10271)利用脚本。 命令执行并回显 直接上传shell 在linux下weblogic 10.3.6.0测试OK 使用方法及参数 python weblogic_wls_wsat_exp.py -t 172.16.80.131:7001 usage: ...
在WebLogic管理控制台中,导航到“Services Configurations” > “JDBC” > “Connection Pools”,然后点击“Configure a new JDBC Connection Pool…”开始配置连接池。在选择数据库类型时,由于例子中使用的是...
weblogic CVE-2019-2725 CVE-2019-2729 POC执行命令并回显usage:单个目标python3 weblogic_get_webshell.py http://url批量目标,将批量url放入url_list.txtpython3 weblogic_get_webshell.py all
Oracle Fusion Middleware Oracle WebLogic Server组件安全漏洞(CVE-2018-2625) 补丁包 对应的weblogic的版本是12.1.3.0 有需要的下载
Weblogic JDBC 数据源配置和详细参数说明 一、JDBC 概述 JDBC(Java Database Connectivity)是 Java 语言中的一种标准数据库连接技术,几乎所有需要访问数据库的 J2EE 应用程序都直接或间接地使用了它。JDBC 提供...
然而,部署过程中可能会遇到各种问题,如在本问题中遇到的"weblogic12c部署webservice错误问题WSSERVLET11"。 错误信息"无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:"指出在部署Web服务时...
Apache 和 Weblogic 安装及配置反向代理转发 在本文中,我们将详细介绍如何安装和配置 Apache 和 Weblogic,以实现反向代理转发。该配置可以将 Weblogic 服务器的内容转发到 Apache 服务器上,从而提高网站的性能和...
配置错误通常是由于服务器配置文件(如`weblogic.xml`或`weblogic-server.xml`)中的错误引起的;网络错误涉及服务器与客户端或其它服务器之间的通信问题;资源错误可能涉及数据源、JMS队列或其它服务的配置不正确;...
weblogic CVE-2018-2628--exp
### Weblogic项目部署知识点 #### 一、Weblogic安装与配置 **1.1 准备安装包** - **Weblogic安装包**: 包含Weblogic服务器的核心组件和工具。 - **项目部署包**: 通常是指待部署的应用程序或者项目的打包文件。 **...
其中,`jdbc:oracle:thin@`表明使用了thin模式的JDBC驱动,适用于远程访问或高性能场景。 ### DB2数据库配置 DB2数据库配置细节如下: - **驱动**: `com.ibm.db2.jcc.DB2Driver` - **URL**: `jdbc:db2://127.0.0.1...
### Weblogic Server配置知识点 #### 一、启动Weblogic Server 根据给定的文档,启动Weblogic Server的具体步骤如下: 1. **通过图形界面启动**: - 首先打开“开始”菜单。 - 寻找并点击“程序”,接着选择...
* ELK-WebLogic-02-01-01:日志记录策略,要求将所有的系统日志和应用日志记录到集中日志服务器中。 * ELK-WebLogic-02-01-02:日志保留策略,要求日志至少保留30天。 通信协议是WebLogic系统安全加固的关键方面。...
- 创建新的 JDBC Data Source: - 选择 Services -> JDBC -> Data Sources,点击 Lock & Edit,然后 New。 - 设置 JNDI 名为 `ACCOUNT`,选择 Database Type 为 Oracle,选择合适的数据库驱动。 - 在 Connection...