我正在使用java web应用程序,它使用hibernate 3.和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>请帮我解决这个问题。
谢谢
发布于 2019-10-31 18:45:26
我也不熟悉proxool本身,你的描述让我想起了在不同框架中观察到的connection pool没有正确终止的行为。
根据documentation,您有两种选择:
当您的服务器终止时,使用ServletConfigurator
shutdown方法的要验证此问题,只需关闭应用程序并监视oracle,以检查活动会话的数量是否降至正常值。
我已经检查了代码,它总是在
块中关闭hibernate会话。
我假设您想表示连接被返回到池中,这本身只在连接没有泄漏方面对您有所帮助。它们通常在这个时间点上不会关闭。
https://stackoverflow.com/questions/58641080
复制相似问题