Notice
Recent Comments
Recent Posts
«   2024/05   »
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 31
Today
Total
관리 메뉴

기록 > 기억

[Oracle] java.sql.SQLRecoverableException: IO Error: Connection reset by peer 본문

에러일지

[Oracle] java.sql.SQLRecoverableException: IO Error: Connection reset by peer

BY SON 2017. 11. 21. 12:56

● 에러 발생

포트폴리오 메인화면 로딩 시 DB 데이터를 조회 하는데 이때 error 메시지 발생 (Connection reset by peer)

새로고침 하면 이후에는 정상적으로 조회됨

 

● 에러 발생 원인

DB는 커넥션을 맺은 후 장시간 사용하지 않으면 커넥션을 반환하는데 (connection time out)

반환된 커넥션을 사용하려고 하여 에러 발생 한거임

한마디로 DB에서 커넥션이 종료되었는데 WAS는 그것을 알아채지 못해서 발생

 

● 해결 방안

특정 시간마다 커넥션이 유효한 상태인지 확인 하도록 설정

 

① context-datasource.xml 수정

<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="#{jdbc['jdbc.driver']}"/>
    <property name="url" value="#{jdbc['jdbc.url']}"/>
    <property name="username" value="#{jdbc['jdbc.username']}"/>
    <property name="password" value="#{jdbc['jdbc.password']}"/>
    <property name="validationQuery" value="SELECT 1 FROM DUAL"/>
    <property name="testWhileIdle" value="true"/>
    <property name="timeBetweenEvictionRunsMillis" value="7200000"/>
</bean>
validationQuery   Pool에서 커넥션 가져오고 반환할 때 유효한 커넥션인지 검사할때 사용되는 쿼리
testWhileIdle       Idle Object Evictor가 커넥션 유효성 검사해 유효하지 않은 커넥션 Pool에서 제거
timeBetweenEvictionRunsMillis   설정된 시간마다 Idle Object를 제거하는 Evictor가 실행됨

※ evictor : 비정상 종료된 커넥션(Idle Object) 제거

 

2시간(7200000밀리초 = 120분)에 한번씩 "SELECT 1 FROM DUAL" 쿼리를 날려 커넥션 유지

Comments