Dev/Server

[Exception] java.sql.SQLRecoverableException: IO 오류

pu3vig 2022. 6. 30. 09:49
728x90
  • target:  

 - java.sql.SQLRecoverableException: IO 오류: 연결 시간 초과

 - java.sql.SQLRecoverableException: IO Error: Connection reset by peer

 


  • issue:

 - 사이트에서 장시간 DB Connection이 발생하지 않다가, 최초 접근 시, 연결 시간 초과 발생

 - 일정 시간 이후에 재접근 시, 정상적으로 DB Conneciton

 


  • cause:
더보기

- case 1

DB Connection을 맺은 후, 장시간 사용하지 않으면 Connection을 반환하는데, 반환된 Connection을 사용하려고 하여 에러 발생

 

더보기

- case 2

Oracle의 경우 11g JDBC드라이버 사용시 connect string을 암호화 하기 위해서 /dev/random을 이용하여 40byte의 난수를 생성한 다음 connect string을 암호화

 

/dev/random은 변동이 적은 시스템에서는 난수 생성이 중단(block)된다는 문제점이 발생한 이력이 있고, /dev/random의 OS level문제 때문에 시스템이 조용하면 /dev/random이용하여 난수생성이 원할하지 않아서 /dev/random으로부터 40byte의 난수를 얻지 못한 JDBC는 connect string을 암호화하지 못하고, 이로인해 DB 접속이 불가

 


  • method: 

1. Check Idle Connection

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName"				value="${jdbc.driver}"/>
	<property name="url"							value="${jdbc.url}" />
	<property name="username"						value="${jdbc.username}"/>
	<property name="password"						value="#{jdbc.password}"/>
	<property name="validationQuery"				value="SELECT 1 FROM DUAL"/>
	<property name="testWhileIdle"					value="true"/>
	<property name="timeBetweenEvictionRunsMillis"	value="1800000"/>	<!-- 30분(millisecond 단위) -->
</bean>

※ context-datasource.xml에 위와 같이 아래의 항목을 추가

※ evictor: 비정상 종료된 connection (Idle Object) 제거

validationQuery Connection pool에서 connection 유효성 검사를 위한 쿼리
testWhileIdle Idle Object evictor가 connection 유효성 검사 후, 유효하지 않은 Connection은 pool에서 제거
timeBetweenEvictionRunsMillis Idle object를 제거하는 Evictor 실행 주기(단위: Millisecond)

 


2. Always create random

 - Oralce 11g의 경우, /dev/random 대신 /dev/urandom을 강제적으로 사용하게 되면 시스템 noise가 없어도 항상 난수 생성

 

 - urandom은 random과 달리 entropy pool 상황에 상관없이 난수생성이 되므로, JDBC드라이버 사용시, 혹은 WAS 구동시 명시적으로 Java옵션을 부여

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

 


더보기

1번과 2번 중 하나만 진행

 


  • source:

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

 

[JAVA] DB접속 오류 (java.sql.SQLRecoverableException: IO Error: Connection reset ) — Steemit

안녕하세요 @flyyou입니다. 이전에 제 소개를 보신분들이 계시지만 아마 기억하지 못하실 것인데요 저는 java 개발자입니다.  나이가 먹고나니 PM도 하고 PL도 하고 하지만 아무튼 직업은 개발자인

steemit.com

 

https://byson.tistory.com/22

 

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

● 에러 발생 포트폴리오 메인화면 로딩 시 DB 데이터를 조회 하는데 이때 error 메시지 발생 (Connection reset by peer) 새로고침 하면 이후에는 정상적으로 조회됨 ● 에러 발생 원인 DB는 커넥션을 맺

byson.tistory.com

 

728x90