Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 即使在系统关闭后,Oracle活动和innactive会话仍然存在_Java_Oracle_Hibernate - Fatal编程技术网

Java 即使在系统关闭后,Oracle活动和innactive会话仍然存在

Java 即使在系统关闭后,Oracle活动和innactive会话仍然存在,java,oracle,hibernate,Java,Oracle,Hibernate,我正在使用使用hibernate 3的java web应用程序。和proxool用于连接池。它主要用于文件上传,大约每小时300个用户上传2000个文件。有时候,负载会越来越高。在oracle端,我面临着大量活动和非活动会话的问题,即使在系统(wildfly服务器)关闭后,会话仍保持原样 我已经检查了代码,它总是在finally块中关闭hibernate会话 我的实际问题是,当oracle端的会话增加时,我的应用程序在一段时间后无法获得数据库连接 我的proxool文件如下所示 <prox


我正在使用使用hibernate 3的java web应用程序。和proxool用于连接池。它主要用于文件上传,大约每小时300个用户上传2000个文件。有时候,负载会越来越高。在oracle端,我面临着大量活动和非活动会话的问题,即使在系统(wildfly服务器)关闭后,会话仍保持原样
我已经检查了代码,它总是在finally块中关闭hibernate会话
我的实际问题是,当oracle端的会话增加时,我的应用程序在一段时间后无法获得数据库连接

我的proxool文件如下所示

<proxool>
      <alias>piokms-conn</alias>
      <driver-url>jdbc:oracle:thin:@1.1.1.1:1521:orcl64</driver-url>  
      <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
      <driver-properties>
            <property name="user" value="test" />
            <property name="password" value="test" />
      </driver-properties>
      <autocommit>false</autocommit>
      <simultaneous-build-throttle>150</simultaneous-build-throttle>
      <minimum-connection-count>200</minimum-connection-count>
      <maximum-connection-count>800</maximum-connection-count>
      <maximum-connection-lifetime>1200000</maximum-connection-lifetime> 
      <maximum-active-time>600000</maximum-active-time>
      <house-keeping-test-sql>SELECT 1 From DUAL</house-keeping-test-sql>
      <statistics>5m,15m,1d</statistics>
      <statistics-log-level>ERROR</statistics-log-level>
      <fatal-sql-exception>Connection is closed,SQLSTATE=08003,Error opening socket. SQLSTATE=08S01,SQLSTATE=08S01</fatal-sql-exception>
      <fatal-sql-exception-wrapper-class>org.logicalcobwebs.proxool.FatalRuntimeException</fatal-sql-exception-wrapper-class>
      <verbose>false</verbose>
      <trace>true</trace>
 </proxool>

康涅狄格州皮克斯
jdbc:oracle:thin:@1.1.1.1:1521:orcl64
oracle.jdbc.driver.OracleDriver
假的
150
200
800
1200000
600000
从双重选择中选择1
5m,15m,1d
错误
连接已关闭,SQLSTATE=08003,打开套接字时出错。SQLSTATE=08S01,SQLSTATE=08S01
org.logicalcbwebs.proxool.FatalRuntimeException
假的
真的
请帮我解决这个问题


谢谢

另外,我对
proxool
本身并不熟悉,您的描述让我想起了在不同框架中观察到的连接池未正确终止的行为

根据您的选择,您有两个选择:

  • 使用
    ServletConfigurator
  • 或者在服务器终止时手动调用该方法
  • 要验证此问题,只需关闭应用程序并监视oracle,以检查活动会话数是否降至正常值


    我已经检查了代码,它总是在finally块中关闭hibernate会话


    我假设您希望表示连接返回到池中,这本身只在连接没有泄漏方面对您有所帮助。此时它们通常不会关闭。

    即使在系统空闲时(没有操作发生且服务器正在运行),也可以看到应用程序服务器上的300多个活动会话“从v$session中选择用户名、计算机、程序、状态,其中type='USER'和STATUS='active”。我不知道系统空闲时活动会话的运行情况。当服务器终止时,我将手动运行shutdown方法。感谢您声称您每小时约有300名用户。如果我们假设所有这些活动会话都属于您的应用程序,并且它们至少处于活动(打开)状态20分钟(根据您的配置),那么这些数字是匹配的。您可能想了解数据库连接池的一般工作原理。