개인적인 정리

java.sql.sqlrecoverableexception: io 오류: connection reset 본문

DB/ORACLE

java.sql.sqlrecoverableexception: io 오류: connection reset

yeon.Biju 2018. 11. 18. 14:16




java.sql.sqlrecoverableexception: io 오류: connection reset


WAS 로그를 보니 이런 경우가 많진 않은데... 가끔 있다.



1. 대부분 정상적으로 동작함.

2. toad 접속 이상 없음..


어떻게 봐도 일단은 문제가 없어 보이는 상황속에 위와 같은 로그가 있어서 2가지 조치를 해줬더니 에러가 나질 않는 것을 확인하였다.



운영환경 

linux + oracle 11g




1. tomcat 시작시 option 추가


https://steemit.com/kr/@flyyou/java-db-java-sql-sqlrecoverableexception-io-error-connection-reset


http://goni9071.tistory.com/entry/connection-reset


https://stackoverflow.com/questions/137212/how-to-solve-slow-java-securerandom


https://github.com/flyway/flyway/issues/1077


의 글 외에도 조치사항으로 


-Djava.security.egd=file:/dev/./urandom


를 말하는 것아서 tomcat 의 catalina.sh 에 추가하였다.


JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" 라고 아랫부분에 추가하였다.



2. validation query 추가


이클립스 환경에서는 문제가 없어서 validation query 를 넣어주지 않았는데.

운영환경에 올려서 일부사람만 지켜보는 상태로 한동안 운영이 되기 때문에 사용자 접속이 전혀 없는 상태가 발생한다.



따라서 connection 이  idle해지는 상태가 꾸준히 발생할 것 같아서 validation query를 추가하였다.


context-datasource.xml 에 아래 내용울 추가하였는데..



        <!-- 특정 시간마다 validationQuery를 실행 셋팅 시작  3600000 : 1시간-->

        <property name="validationQuery" value="select 1 from dual"/>

        <property name="testWhileIdle" value="true"/>

        <property name="timeBetweenEvictionRunsMillis" value="1800000"/>

        <!-- 특정 시간마다 validationQuery를 실행 셋팅 끝 -->




전체를 보면 아래와 같다.


<!-- Oracle -->

<bean id="dataSource-oracle" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="${Globals.DriverClassName}"/>

<property name="url" value="${Globals.Url}" />

<property name="username" value="${Globals.UserName}"/>

<property name="password" value="${Globals.Password}"/>


<!-- 특정 시간마다 validationQuery를 실행 셋팅 시작  3600000 : 1시간-->

        <property name="validationQuery" value="select 1 from dual"/>

        <property name="testWhileIdle" value="true"/>

        <property name="timeBetweenEvictionRunsMillis" value="1800000"/>

        <!-- 특정 시간마다 validationQuery를 실행 셋팅 끝 -->

       </bean>


mysql 이라면 아래와 같이 추가해준다.


<!-- 특정 시간마다 validationQuery를 실행 셋팅 시작  3600000 : 1시간-->

        <property name="validationQuery" value="select 1"/>

        <property name="testWhileIdle" value="true"/>

        <property name="timeBetweenEvictionRunsMillis" value="100000"/>

        <!-- 특정 시간마다 validationQuery를 실행 셋팅 끝 -->





일단 위와 같은 방벙으로 에러로그가 남지 않는 것을 확인하였고

순서대로 진행을 하였는데..


1번만 했을 경우에도 에러로그는 남았었다.



3번, 4번으로 할 내용들을 준비해놨었는데.. 에러로그가 더 이상 남지 않아서 이것으로 종료를 할 예정이다. 


Comments