C3P0 Spring 休眠:池已用尽。如何调试?
C3P0 Spring Hibernate: Pool maxed out. How to debug?
我在 Tomcat 上有一个 Spring Hibernate 应用程序。
连接池为 C3P0
我很快遇到来自 C3P0 的线程池已用尽警告。然后对 webapp 的所有请求都挂起。
我仍然假设我在代码中的某处遗漏了 @Transaction 注释。我想调试我的代码。
问:是否可以通过代码访问连接池,以便在连接释放和未释放时进行调试?
更新:当前 c3p0 配置:
<!-- Hibernate -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="org.postgresql.Driver" />
<property name="jdbcUrl" value="jdbc:postgresql://localhost/ikoda01?useUnicode=true&characterEncoding=utf8" />
<property name="user" value="xxxuser" />
<property name="password" value="xxxxx" />
<property name="acquireIncrement" value="2" />
<property name="minPoolSize" value="3" />
<property name="maxPoolSize" value="50" />
<property name="maxIdleTime" value="600" />
</bean>
Can I access the connection pool via code so I can debug when a connection is released and when it is not released?
您甚至不必编写代码,这是内置的。如果您配置 c3p0 来调试连接泄漏,它只会将检查泄漏连接的代码路径的堆栈跟踪打印到您的日志中。
更新:
<property name="unreturnedConnectionTimeout" value="30" />
<property name="debugUnreturnedConnectionStackTraces" value="true" />
unreturnedConnectionTimeout
应使用的值取决于您的应用程序。它应该比连接的最长预期合法使用时间长,但不是越短,您就会越快收到有关泄漏的日志消息,并且您的应用程序将越顺利地解决它。对于大多数 web-ish 应用程序,上面显示的 30 秒是保守的,客户端不会等待大约 30 秒的响应,因此超时安全地表示连接泄漏。
我在 Tomcat 上有一个 Spring Hibernate 应用程序。 连接池为 C3P0
我很快遇到来自 C3P0 的线程池已用尽警告。然后对 webapp 的所有请求都挂起。
我仍然假设我在代码中的某处遗漏了 @Transaction 注释。我想调试我的代码。
问:是否可以通过代码访问连接池,以便在连接释放和未释放时进行调试?
更新:当前 c3p0 配置:
<!-- Hibernate -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="org.postgresql.Driver" />
<property name="jdbcUrl" value="jdbc:postgresql://localhost/ikoda01?useUnicode=true&characterEncoding=utf8" />
<property name="user" value="xxxuser" />
<property name="password" value="xxxxx" />
<property name="acquireIncrement" value="2" />
<property name="minPoolSize" value="3" />
<property name="maxPoolSize" value="50" />
<property name="maxIdleTime" value="600" />
</bean>
Can I access the connection pool via code so I can debug when a connection is released and when it is not released?
您甚至不必编写代码,这是内置的。如果您配置 c3p0 来调试连接泄漏,它只会将检查泄漏连接的代码路径的堆栈跟踪打印到您的日志中。
更新:
<property name="unreturnedConnectionTimeout" value="30" />
<property name="debugUnreturnedConnectionStackTraces" value="true" />
unreturnedConnectionTimeout
应使用的值取决于您的应用程序。它应该比连接的最长预期合法使用时间长,但不是越短,您就会越快收到有关泄漏的日志消息,并且您的应用程序将越顺利地解决它。对于大多数 web-ish 应用程序,上面显示的 30 秒是保守的,客户端不会等待大约 30 秒的响应,因此超时安全地表示连接泄漏。