기술지원 문의

Cant open... full database pool 에러 관련 질문입니다.
조근필 / 2003-01-15 00:00

[DatabaseManager]java.sql.SQLException: Cant open connection with full database pool
 (250)

위와 같은 에러가 계속 발생 합니다.
저 에러는 Resin.conf에 설정한 Pool을 max-connection의 한계치까지 사용 하고 있기 때문에 더이상 Pool을 할당 받을수 없어 발생하는 에러인걸로 알고 있습니다.
그 시점에서 DB서버쪽을 모니터 해보면 active되어 있는 세션을 그다지 많지가 않습니다. 100개도 채 안됩니다. ( max : 800 )
나머지 거의 대부분이 inactive상태임.
저희와 같은 경우 Connection Pool이 30분간 일을 안하고 있으면 반환이 되고, 그렇지 않을경우 작업이 끝난 Pool은 다른 연결을 처리 하게끔 되어 있는걸로 알고 있습니다.
Connection Pool이 제 기능을 해주지 못하고 있는것 같아 이렇게 질문을 드립니다.
저희쪽 설정상에 오류가 있는건지... 아니면 저희가 사용하고 있는 Resin버전에 버그가 있는건지 답변 부탁드립니다.


3대의 웹서버가 로드벨런싱 되고 있고 각각에 pool은 250개씩 할당이 되어 있습니다.
...
  
  
  
...

Resin : 2.0.4
J2SDK 1.3.1_01
Apache : 1.3.27

참고로 에러가 뿌려질 상황을 모니터 해보면 80port접속자는 100명 안팍이며, 발생된 java Thread수는 500여개 정도, 열려있는 6802port의 수는 250여개 정도 입니다.

저희프로그램의 일관성 없는 트랙젝션 때문이란 답변은 말아 주시기 바랍니다.   나름데로 분석을 해 보았으나 별다른 문제점을 발견하지 못하였습니다.
글이 좀 길어 졌습니다.   
저희 resin.conf 파일을 첨부하오니 답변 부탁드립니다.
행복한 하루 되세요~ 

Re:Cant open... full database pool 에러 관련 질문입니다.
관리자 / 2003-01-16 00:00

안녕하세요.

이런 경우에 대한 정답을 찾기란 정말 어렵습니다.
그렇지만 현재 설정을 기준으로 볼 때
max-connection의 수치는 상당히 높게 설정되어 있는 것 
같습니다. 그 자체가 문제가 있는 것은 아니지만 경험적으로 
볼 때 사용자가 아주 많은 경우에도 디폴트를 넘어서는 경우는
드물거든요. 
 수치는 말씀하신
내용이 정확합니다 그러나 Pool이 아주 빈번하게 활용되고 
있는 상황에서 이 수치는 별도 타당해보이지 않아 보입니다.
즉 사용된 Connection이 idle한 상태로 30분간 유지되어
DB와의 실제 연결을 하고 있다가 다시 요청이 있으면 
재사용된다는 이야긴데. 운영하시는 사이트에서는 그런 일이
별로 없을 것 같습니다. 이 부분은 오히려 DB쪽에서 Connection을
끊어버린 경우 문제가 생길 수 있으므로 수치를 좀 줄이는 것이
나을 것 같습니다.

그리고  
혹시 Close()부분에 확신이 없으시다면

를 삽입하셔도 좋고

DB request를 요청한 쓰레드가 connection을 할당받기위해
대기하는 시간 설정인
 도 의미가 
있을 것 같습니다.(DB관련설정의 수치는 모두 Second입니다.)
max-active-time은 Default 가 6시간이고
connection-wait-time는 Default 가 10분입니다.

전체적으로는 windows에서라면 IIS나 아파치2.0이
아파치1.x 보다는 효율적이라고 합니다.(쓰레드지원 문제)
JDK도 버전업을 했으면 하구요.
Resin 2.0.4역시 버전업을 했으면 합니다.
Resin최신버전은 2.1.6이고 그동안 DB Pool관련된 fix가 
상당부분이 있었습니다.



--조근필 님의 글 [2003-01-15 17:16:29]
>[DatabaseManager]java.sql.SQLException: Cant open connection with full database pool
 (250)

위와 같은 에러가 계속 발생 합니다.
저 에러는 Resin.conf에 설정한 Pool을 max-connection의 한계치까지 사용 하고 있기 때문에 더이상 Pool을 할당 받을수 없어 발생하는 에러인걸로 알고 있습니다.
그 시점에서 DB서버쪽을 모니터 해보면 active되어 있는 세션을 그다지 많지가 않습니다. 100개도 채 안됩니다. ( max : 800 )
나머지 거의 대부분이 inactive상태임.
저희와 같은 경우 Connection Pool이 30분간 일을 안하고 있으면 반환이 되고, 그렇지 않을경우 작업이 끝난 Pool은 다른 연결을 처리 하게끔 되어 있는걸로 알고 있습니다.
Connection Pool이 제 기능을 해주지 못하고 있는것 같아 이렇게 질문을 드립니다.
저희쪽 설정상에 오류가 있는건지... 아니면 저희가 사용하고 있는 Resin버전에 버그가 있는건지 답변 부탁드립니다.


3대의 웹서버가 로드벨런싱 되고 있고 각각에 pool은 250개씩 할당이 되어 있습니다.
...
  
  
  
...

Resin : 2.0.4
J2SDK 1.3.1_01
Apache : 1.3.27

참고로 에러가 뿌려질 상황을 모니터 해보면 80port접속자는 100명 안팍이며, 발생된 java Thread수는 500여개 정도, 열려있는 6802port의 수는 250여개 정도 입니다.

저희프로그램의 일관성 없는 트랙젝션 때문이란 답변은 말아 주시기 바랍니다.   나름데로 분석을 해 보았으나 별다른 문제점을 발견하지 못하였습니다.
글이 좀 길어 졌습니다.   
저희 resin.conf 파일을 첨부하오니 답변 부탁드립니다.
행복한 하루 되세요~