티스토리 뷰

728x90

Communications link failure 에러는 디비 연결이 끊어진 경우에 쿼리를 실행 한 경우 나는 에러이다.

아래와 같이 SELECT 1이라는 vaildation query를 실행하는데 이미 db connection이 꾾어졌기 때문에 validation query를 실행하는데 에러가 발생한 것이다.

DB서버에서 연결을 끊어버리는 기준이 되는 시간과 관련 된 설정값은 wait_timeout이다.

 

아래의 명령어를 입력하면 wait_timeout이 몇초로 설정되어있는지 확인 가능하다.(기본값 : 28800초)

나는 개발서버에서 Communications link failure 가 자주 나타나서 (사실 validation query를 실행시키고 나서 컨넥션을 맺고 다음 쿼리를 실행시키기 때문에 무시해도된다) 값을 확인 해봤는데 600초...10분이었다.😥 장난하나..

에러를 분석해본 결과, 10분 이상 디비 컨넥션이 없었던 상황에서 디비 컨넥션이 되면 에러가 났다.

사실 이 설정값을 변경해주고 싶지만, (너무 낮은것 같다) 나에게 DB 접근권한이 없기 때문에 다른 방법을 사용해야한다.

(실제로 값을 변경하는걸 권장하지는 않는다고 한다. 그래도 너무 낮은거 같음..😕)

이를 해결하기 위해 일정주기마다 validation query를 실행시켜주면 된다.
아래와 같이 testWileIdle과 timeBetweenEvictionRunMillis 설정을 추가해주자!

<bean id="dataSource-mysql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${DriverClassName}"/>
    <property name="url" value="${Url}" />
    <property name="username" value="${UserName}"/>
    <property name="password" value="${Password}"/>
    <property name="validationQuery" value="SELECT 1" />
    <property name="testWhileIdle" value="true"/>
    <property name="timeBetweenEvictionRunsMillis" value="540000"/>
</bean>

이렇게 property를 추가해주면 540000milisecond(9분)마다 validationQuery가 실행되면서,

연결시간이 종료되기 전에 연결 시간이 초기화 되어 Communications link failure 는 발생하지 않는다.

아래 로그를 보면 14:22:11을 마지막으로 db와 연결했고 9분 후인 14:31:10에 validation query가 실행 된 것을 확인 할 수 있다,

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함