为啥从 JBoss 7.1.0EAP 到 Oracle 11g 生成了 100 个幽灵 Oracle 会话

Posted

技术标签:

【中文标题】为啥从 JBoss 7.1.0EAP 到 Oracle 11g 生成了 100 个幽灵 Oracle 会话【英文标题】:Why 100 of ghost Oracle sessions are getting generated from JBoss7.1.0EAP to Oracle11g为什么从 JBoss 7.1.0EAP 到 Oracle 11g 生成了 100 个幽灵 Oracle 会话 【发布时间】:2020-03-10 14:35:38 【问题描述】:

我们最近将 JBoss 版本中的 spring-mvc 应用程序从 4 升级到了 JBoss7.1.0.EAP。还有 Java6 到 Java8 以及 hibernate5.1 以及从 SunOS 到 RedHat Linux7.1 的基础设施。 Oracle11g 数据库没有升级。我们使用了standalone.xml 来自JBoss 的连接池。应用程序中没有代码更改,只是提升和转移。 在生产环境中,我们注意到创建了 100 个不活动的 Oracle 会话,并且很少有会话长时间锁定并阻塞重要表,从而使应用程序运行缓慢。 我们在 JBoss 中使用了 ojdbc14.jar。

是否有任何补救措施或方法来弄清楚为什么会发生这种情况以及如何解决这个问题。

Standalone.xml 中的代码

 <datasource jta="true" jndi-name="xxxxxxxxx" pool-name="xxxxxxxxx" enabled="true" use-ccm="false">
                    <connection-url>jdbc:Oracle:thin:xxxxxxxxxxx</connection-url>
                    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                    <driver>oracle</driver>
                    <pool>
                        <min-pool-size>0</min-pool-size>
                        <max-pool-size>500</max-pool-size>
                    </pool>
                    <security>
                           <user-name>xxxxxxx</user-name>
                           <password>xxxxxxxx</password>
                    </security>
                    <validation>
                      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                      <background-validation>true</background-validation>
                      <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                    </validation>
                 </datasource>

【问题讨论】:

您允许 JBoss 创建最多 500 个连接 - 我没有看到任何会关闭空闲连接的配置 与您的问题无关:ojdbc14.jar 旨在与 Java 1.4 一起使用,如果您使用 Java,您应该至少使用 ojdbc6.jar 或更好的 ojdbc7.jar 8 与 Oracle 11 standalone.xml 中是否有任何设置可以关闭非活动会话。在代码库中,每当我们打开连接时,我们都会特意关闭它。并且在这次迁移过程中代码没有变化 是的..将在服务器中将其更改为 ojdbc7.jar。 【参考方案1】:

要为连接配置空闲超时,您可以添加元素:

<idle-timeout-minutes>15</idle-timeout-minutes>

在最近的 JBoss 版本中,默认值已从 15 分钟更改为 30 分钟。

您也可以考虑将 oracle 驱动程序更新到更新的版本(例如 ojdbc7.jar)。见这里https://www.oracle.com/database/technologies/jdbc-drivers-12c-downloads.html

【讨论】:

是的..会这样做并让你知道..Thnx

以上是关于为啥从 JBoss 7.1.0EAP 到 Oracle 11g 生成了 100 个幽灵 Oracle 会话的主要内容,如果未能解决你的问题,请参考以下文章

JBoss EAP 7.1.0 使用 cli 连接但使用 CommandContext 或 ModelControllerClient 失败

从Jboss EAP 6.4迁移到EAP 7.1

为啥在 JBoss7.1.EAP 中运行应用程序时出现 java.lang.NoSuchMethodError

jconsole 未检测到 jboss eap 6.1

从 JBoss AS 7.1 迁移到 JBoss EAP 7.3.0

Jboss (6.4 EAP) 到 WebSphere (7.x)