簡體   English   中英

使用休眠時,數據庫連接太多

[英]Too many DB connections while using hibernate

我是新來的冬眠和春天。 我們有一個基於spring的服務,它使用hibernate使用oracle數據庫。 此服務部署到4台主機。

我們有一個外部Java客戶端正在使用我們的服務。 它每秒大約進行約40次服務調用。 理想情況下,最多應該有40個(呼叫)* 4個(主機)= 160個開放連接。 但由於某種原因,我們服務使用的數據庫連接增長甚至超過600。

我們可以設置一些指標來檢查數據庫連接中的泄漏嗎? 我們怎樣才能找到這些泄漏連接?

任何幫助,將不勝感激。

謝謝,凱文

If you are using 3rd party jars for connection polling then you can enable their logging and set logAbandoned property to true. So it will log your all logAbandoned connections.

As shown below - 
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="driverClassName" value="${dataSource.driverClassName}" />
        <property name="url" value="${dataSource.url}" />
        <property name="username" value="${dataSource.username}" />
        <property name="password" value="${dataSource.password}" />
        <property name="validationQuery" value="${datasource.validationQuery}" />
        <property name="maxActive" value="${datasource.maxActive}" />
        <property name="maxIdle" value="${datasource.maxIdle}" />
        <property name="maxWait" value="${datasource.maxWait}" />
        <property name="testOnBorrow" value="true" />
        <property name="testWhileIdle" value="true" />      
        <property name="minIdle" value="${datasource.minIdle}" />
        <property name="initialSize" value="${datasource.initialSize}" />
        <property name="timeBetweenEvictionRunsMillis" value="${datasource.timeBetweenEvictionRunsMillis}" />
        <property name="logAbandoned" value="${datasource.logAbandoned}" />
    </bean>

如果您正在使用具有Hibernate的連接池,那么您的池提供程序可能會保持很多連接,即使它們未被使用。 如果是c3po,請檢查connection.minPoolSizeconnection.maxPoolSize屬性。

我的數據源bean看起來像這樣:

<bean id="fssDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass">
         <util:property-path path="FSSConfiguration.driverName"/>
    </property>
    <property name="jdbcUrl">
        <util:property-path path="FSSConfiguration.url" />
    </property>
    <property name="user">
            <util:property-path path="FSSConfiguration.username" />
    </property>
    <property name="password">
            <util:property-path path="FSSConfiguration.password" />
    </property>
    <property name="initialPoolSize" value="1" />
    <property name="minPoolSize" value="1" />
    <property name="maxPoolSize" value="20" />
    <property name="maxIdleTime" value="240" />
    <property name="checkoutTimeout" value="60000" />
    <property name="acquireRetryAttempts" value="0" />
    <property name="acquireRetryDelay" value="1000" />
    <property name="debugUnreturnedConnectionStackTraces" value="true" />
    <property name="unreturnedConnectionTimeout" value="300" />
    <property name="numHelperThreads" value="1" />
    <property name="preferredTestQuery" value="SELECT 1 FROM DUAL" />
</bean>

你可以驗證嗎?

您可以在log4j.xml中添加以下appender,並將所有c3p0日志定向到$ {catalina.home} /logs/c3poLog.log文件 -

<appender name="c3poLogs" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="DEBUG"/>
    <param name="Append" value="true"/>
    <param name="File" value="${catalina.home}/logs/c3poLog.log"/>
    <!--<param name="DatePattern" value=".yyyy-MM-dd"/>-->
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
    </layout>
</appender>


<category name="com.mchange.v2" additivity="false">
    <priority value="${log4j.category.com.mchange.v2}"/>
    <appender-ref ref="c3poLogs"/>
</category>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM