일하다 보면 가끔 Connection pool exhausted 라는 낮익은 문구를 마주칠때가 많다.
정확히는 Connection관리를 잘하면 생기지 않는 문제지만,
살다보면 실수할 수도 있고...깜박할 수도 있고 해서 가끔 이런 에러가 난다.
이런 문제는 사용자를 상대로하는 WEB Service에서는 치명적일 수 있다.
만약 관리자를 위한 서버일 경우에는 큰 문제가 되지 않지만 (될 수도 있고)
일반 엔드 유저를 위한 서버일 경우에는 문제가 심각해진다.
근본적으로 try catch finally 정확하게 connection을 관리하는 것이 중요하지만,
이미 소스가 너무 커졌을 경우나 정확한 위치를 찾기 힘들때는 DBCP 의 설정으로 해결 할 수 있다.
LogAbandoned: false
RemoveAbandoned: true
RemoveAbandonedTimeout: 300
이런식으로 설정하여 줄수 있다. 설정하는 파일의 경우 사용중인 시스템에 따라 다를 수 있지만 대부분 jdbc를 설정하는 곳과 함께 있을 것이라고 생각한다.
간략히 소개하자면
LogAbandoned 는 로깅여부 - 누수되는 위치를 알 수 있다.
RemoveAbandoned - true
RemoveAbandonedTimeout - 연결을 끊을 시간을 설정한다.
주의할 점은 RemoveAbandonedTimeout 시간 이후 바로 그 커넥션이 종료 될 것이라고 생각할 수 있으나 그렇지는 않다.
자세한 내용은 다음에 해야지
'Java' 카테고리의 다른 글
Preparestatement CANNOT order by (0) | 2014.05.26 |
---|---|
자바 default charset 에 관하여 (0) | 2014.05.07 |
JAVA Encoding 과 Decoding에 대한 정리 (0) | 2013.11.14 |
Illegal group reference 문제 해결 , 원인 replaceAll 매개변수 (0) | 2013.11.12 |
HttpURLConnection setTimeout 적용 안될때, 안된다고 착각 할 때 (2) | 2013.11.07 |