2014-01-24 3 views
1

스프링이있는 c3p0 연결 풀 (일반 jdbc, 최대 절전 모드 없음)을 사용하고 있습니다. 다음은 풀 구성입니다.c3p0 풀이 줄어들지 않습니다.

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${jdbc.driver}"/> 
    <property name="jdbcUrl" value="${jdbc.url}"/> 
    <property name="user" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <property name="acquireIncrement" value="3"/> 
    <property name="minPoolSize" value="3"/> 
    <property name="maxPoolSize" value="25"/> 
    <property name="maxStatementsPerConnection" value="0"/> 
    <property name="numHelperThreads" value="6"/>   
    <property name="testConnectionOnCheckout" value="false" /> 
    <property name="testConnectionOnCheckin" value="false" /> 
    <property name="idleConnectionTestPeriod" value="10"/> 
    <property name="preferredTestQuery" value="select curdate()"/> 
    <property name="maxIdleTime" value="5" /> 
    <property name="unreturnedConnectionTimeout" value="5" />  
    <property name="debugUnreturnedConnectionStackTraces" value="true" /> 
</bean> 

연결 풀을 모니터링하는 데 JMX를 사용하고 있습니다. 나는 나의 수영장이 25의 아래에서로드에 관해 성장하는 것을 안다. 그러나 결코 뒤로 물러 서지 마라. 여기에 코피를 놓친 건가?

답변

2

기본값은 풀을 축소하지 않는 것입니다. maxIdleTimeExcessConnections를 설정해야합니다. 수동 (추가 강조)에서 :

maxIdleTimeExcessConnections

기본값 : minPoolSize를 초과하는 연결이 은 도태되기 전에 풀에서 유휴 상태 허용해야한다 초 0

번호 . 스파이크를 다음, 경우 다시 minPoolSize을 향해 풀을 축소, 적극적으로 개방 연결의 수를 최소화하고자 응용 프로그램의 의도, 부하 수준이 감소하고 획득 한 연결은 더 이상 필요하지 을하지 않습니다. maxIdleTime이 설정된 경우 maxIdleTimeExcessConnections 은 매개 변수가 영향을 주려면 작아야합니다. 0을 의미합니다. 시행하지 않아도 초과 연결은 유휴 상태가 아닙니다.

  • 이 minPoolSize 및 maxPoolSize에 대한 합리적인 값을 정의 풀 높은 부하의 기간 후에 축소 할 수

. 기본값은 각각 3과 15이며, 이는 많은 응용 프로그램에서 정상적으로 작동합니다.

  • maxIdleTime의 값을 설정하십시오. 내 앱과 db 서버 사이의 시스코 방화벽이 1 시간 후에 TCP 연결을 시간 초과하기 때문에 2700 초 (45 분)를 선택했습니다. C3P0는이 기간보다 오래 동안 유휴 상태 인 연결을 삭제합니다.
  • maxIdleTimeExcessConnections 값을 설정하십시오. 나는 600 초 (10 분)를 골랐다. C3P0은 minPoolSize 연결 만 열려있을 때까지이 기간 동안 유휴 상태 인 연결을 닫습니다. http://www.mchange.com/projects/c3p0/index.html#managing_pool_size 당
  • +0

    는 "maxIdleTime는 연결이 풀에서 도태되기 전에 사용하지 않는 이동하도록 허용해야하는 시간 (초)을 정의합니다." 풀에서 유휴 연결을 제거하는 데 사용되는 것으로 생각했습니다. – Pushkar

    +0

    @Pushkar, 나는 c3p0를 사용하기 시작할 때 maxIdleTime 매개 변수에 대해 동일한 가정을했다. 나는 JMX 풀 크기를 모니터링하는 것과 같은 연습을했고 풀이 줄어들지는 않았 음을 알았다. maxIdleTime과 maxIdleTimeExcessConnections의 조합이라는 것을 알게되었습니다. maxIdleTimeExcessConnections가 없으면 연결이 유휴 상태가 될 수 있지만 즉시 풀 크기로 유지하기 위해 새 연결로 바뀝니다. –

    관련 문제