본문 바로가기

IT/자바

JAVA 프로세스 구동시 지연발생

반응형

에러로그 : Oracle GetConnection 지연 발생 또는 Connection Reset 발생

              (WaitTimeOutException 또는 SocketException)

 

ERROR manager.SqlManager: Error executing statement: java.sql.SQLRecoverableException: IO Error: Connection reset

java.sql.SQLRecoverableException: IO Error: Connection reset

 

상황 : 블로킹 이슈로 인해 프로세스 구동 지연 발생!!!


원인 : JDBC 드라이버를 사용시 connection String 을 암호화하는데 /dev/random로 난수를 생성하여 암호화를 진행하는데 block이 걸려 지연이 발생함. 

 

확인 방법 : DB getConnection 시간을 체크하여 일정하지 않으면 /dev/random block으로 인한 지연으로 판단 

 

[상세 설명] 

- 리눅스 서버는 난수 생성시 /dev/random 디바이스 (=Entropy pool)를 사용한다.

 

사용자의 입력 신호를 수집하여 entropy pool에 저장하고, 해당 값을 이용해서 난수를 생성하기 때문에 보안적으론 우수하나, 이벤트가 없는 경우 대기상태에 빠지면서 blocking이 발생한다.

 

  entropy pool에 저장될 이벤트가 없는 경우 entropy pool이 비어있고, 장기간 난수가 발생하지 않을 수 있음.

 

- /proc/sys/kernel/random/poolsize 파일 = entropy pool의 크기

- /proc/sys/kernel/random/entropy_avail 파일 = 현재 entropy_count 값

 

[리눅스 난수 생성기 옵션]

1) random : 시스템 커널의 entropy에서 random값을 가져올때 pool이 비여있으면 채워질때까지 blocking 상태가 됨.

    장/단점 : 랜덤 분포도가 넓음 / 다량의 랜덤 데이터 생성시 block 됨 

2) urandom : 시스템 커널의 entropy에서 random값을 가져올때 pool이 비여있으면 바로 SHA, MD5로 랜덤값 생성 됨.

    장/단점 : 다량의 랜덤 데이터 생성시 block 발생 X / 랜덤 분포도가 좁음

 

 

* egd는 entrophy gathering device

 

 

해결 : -Djava.security.egd=file:///dev/urandom 옵션을 통해 non blocking 모드로 프로세스 실행

 

반응형

'IT > 자바' 카테고리의 다른 글

Chapter2 동작 파라미터화 코드 전달하기  (0) 2020.08.30
HashMap의 동작  (0) 2020.07.23
가비지 컬렉션에 대한 정리  (0) 2020.07.23
[ORACLE] JOIN _ ON 과 WHERE _ 오라클 조인  (0) 2020.02.17
Java Wapper 클래스  (0) 2020.01.07