- 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
[Oracle] java.sql.SQLRecoverableException: IO Error: Connection reset by peer
● 에러 발생 포트폴리오 메인화면 로딩 시 DB 데이터를 조회 하는데 이때 error 메시지 발생 (Connection reset by peer) 새로고침 하면 이후에는 정상적으로 조회됨 ● 에러 발생 원인 DB는 커넥션을 맺
byson.tistory.com
'Dev > Server' 카테고리의 다른 글
[curl/telnet] 대상 서버 포트 오픈 여부 확인 (0) | 2022.09.30 |
---|---|
[Tomcat] session timout & error page (0) | 2022.07.21 |
[Apache] 설정 파일의 주석 위치에 따른 Apache 응답 속도 저하 (0) | 2022.06.28 |
[Tomcat] URL 마지막에 jsessionid가 생성되는 원인 및 해결안 (0) | 2022.06.28 |
[Web/WAS] Apache - Tomcat 연동 (mod_proxy / mod_proxy_ajp) (0) | 2022.06.24 |