2013-07-16 2 views
1

연결 풀링에 C3P0을 사용하는 응용 프로그램이 있습니다. 그것은 오랫동안 잘 작동하지만, 최근에 나는 데이터베이스를 공격하려고하는 동안 다음과 같은 예외가 발생합니다.C3P0 maxPoolSize 사용됨

com.amazon.carbonado.FetchException: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from [email protected] -- timeout at awaitAvailable() 

Google 검색에서 maxPoolSize가 고갈 된 것으로 나타났습니다. 내가 풀 크기를 25에서 100으로 늘려 이유인지 확인했습니다. 일시적으로 수정되었지만 나중에 DB 연결을 시도하는 동안 오류가 다시 보입니다 (그 당시 다른 db 연결 요청은 없었습니다). 활성/비활성 연결에 대한 DB를 확인할 때 v $ 세션에서 시스템에서 단 하나의 항목이 있습니다. 그러나 나는이 오류를 받고있다. 연결이 사용되는 곳을 모르겠다.

왜 이런 일이 일어날 수 있는지 말해 줄 수 있습니까? 또한 C3P0의 maxPoolSize는 무엇을 나타 냅니까? 체크 아웃 할 수있는 DB 연결입니까?

또한 poolSize는 실제 dbConnections를 나타 냅니까?

답변

3

몇 가지. com.mchange.v2.resourcepool.TimeoutException은 사용자가 checkoutTimeout으로 설정했음을 나타내고 초과했습니다. 이는 대개 maxPoolSize을 치고 Connections을 신속하게 반환하지 않기 때문에 발생하지만 반드시 그런 것은 아닙니다. 값이 매우 작 으면 제한되지 않은 풀에서 Connection을 획득하면이를 유발할 수 있습니다.

당신이 가지고있는 것과 매우 흡사합니다. 지쳐 풀에 이르는 Connection 누수입니다. (설정되지 checkoutTimeout을 확인하고 응용 프로그램이 결국 오히려 예외를 던지기보다는, 무기한 중단하면 볼 수 있습니다.) 당신이 연결을 누출하는 경우, 당신은

  1. 원하는 연결을 관리하는 신뢰할 수있는 자원 정리 관용구를 사용하십시오 - - here, "나머지 견적보기"를 클릭하십시오.

  2. unreturnedConnectionTimeoutdebugUnreturnedConnectionStackTraces을 사용하여 연결 유출을 추적하고 수정하십시오. this discussion도 참조하십시오.

행운을 빕니다!