2012-01-10 2 views
4

내 GUI 응용 프로그램과 함께 c3po 풀링을 사용했습니다. 나는c3po 헬퍼 스레드가 교착 상태가 됨

overrides.put("maxStatementsPerConnection", 30); 
overrides.put("maxPoolSize",70); 
overrides.put("checkoutTimeout", 50000); 

때때로 나는 내가 다른 연결이 열려 확신 비록 시도가

java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. 
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:527) 
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
    at com.jthink.jaikoz.db.Db.createConnection(Db.java:402) 

밖으로 연결 시간을 얻을 수있는 상황에 들어가 다음과 같은 구성을 가지고있다. 실제로 몇 가지 추가 옵션 (debugUnreturnedConnectionStackTraces, unreturnedConnectionTimeout)을 사용하여 연결을 닫지 않는 문제를 확인하고 아무런 문제도 발견하지 못했습니다. 이 문제는 거의 발생하지 않으며 얼마 동안 실행 한 후에 만 ​​발생합니다. 임베디드 Derby 데이터베이스와 함께 사용하고 있습니다.

운이 좋다면 이번에는 실패했을 때 Yourkit 프로파일 러가 활성화되어 있고 모니터 프로파일 링을 할 수 있었고 서로를 기다리고있는 3 개의 c3po 스레드가 있다는 것을 알았습니다. 그래서 나는 생각합니다 이 교착 상태가 여기

com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#0 
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#1 
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread#2 

실제로이 numHelperThreads의 설정과 유사하다?

나는, 나는 그것을 복구하는 코딩 할 수 있습니다 내가 C3PO에 문제가 찾았이

enter image description here

의 SCREENDUMP했다?

+0

미안하지만 c3po 란 무엇입니까? 다른 스타 워즈 로봇? – Iznogood

+1

@Iznogood c3p0은 PooledConnection 라이브러리입니다. http://www.mchange.com/projects/c3p0/index.html –

+0

@DanW 감사합니다 !!! – Iznogood

답변

1

표시되는 세 개의 스레드는 실제로 도우미 스레드입니다. 이는 사용되지 않는 연결을 닫는 것과 같이 JDBC 작업을 비동기식으로 느리게 수행합니다. stacktrace의 마지막 줄

com.jthink.jaikoz.db.Db.createConnection(Db.java:402) 

은 C3P0이 새 연결을 열려고 시도하는 것으로 보이지만 데이터베이스에서 연결을 거부합니다. 나는 'Jaikoz'데이터베이스가 연결을 거부한다고 가정하고, C3P0 연결 풀은 여기에서 문제가되지 않습니다.

사이먼

관련 문제