-
Tomcat 5에서 JNDI DataSource를 통한 DB 커넥션 풀 사용시 주의할 점카테고리 없음 2008. 5. 13. 01:18
현재 라이프 발란스는 JIND 커넥션 풀을 사용하고 있는데, 몇가지 업데이트를 하면서 이상하게 디비접속이 되다 안되다 하는 문제가 있었다. 내동네 잘 되던게 안되는 상황. 자꾸 이해 할 수 없는 화면을 보여주는 브라우저를 이해할 수가 없었다. 힌트는 다음의 한줄.
Exception org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool exhausted
한참을 헤멨다. 로그를 찍어보고, 소스를 샅샅히 훑어보아도 원인을 알 수 없었는데 결국 몇시간이 지나서야 원인을 알 수 있었다.
원인은 DB 커넥션이 끊기는데 있었다. Tomcat이 작동중인 JVM이 가비지 컬렉션을 할 때, 그 시간이 JNDI Resource에 파라미터로 설정한 maxWait보다 길게 갈 경우 DB 커넥션이 끊어질 수 있다고 한다. 라이프발란스의 maxWait값이 조금 작게 설정되어있었던 것이다. 값을 15000으로 늘려주니 더이상의 에러는 보이지 않았다.
에효... 시간을 홀랑 날려서 짜증은 좀 나지만, 그래도 이런거 하나 풀고나면 꼭 퍼즐을 하나 해결하듯 후련해서 기분이 좋다. ^^
다음은 LB의 커넥션 풀 설정값.
maxActive="30" maxIdle="10" maxWait="15000"
username="***" password="***" driverClassName="com.mysql.jdbc.Driver"
validationQuery="select 1" url="jdbc:mysql://***?autoReconnect=true"/>