티스토리 뷰

64bit 리눅스 시스템에서 프로그램을 개발하다 만난 희안한 에러다.


옆에 실행중인 sqldeveloper는 잘 되는데 테스트중인 프로그램은 connection reset이 발생한다. 

어쩔때는 잘되고 어쩔대는 안되고 안되면 참 안된다. 계속 안된다. 잘되면 그냥 잘된다.

원인을 찾을 수가 없었다. 랜덤이다. 버그가 랜덤이다.


원인은... random 때문이었다. 

/dev/random, /dev/urandom, 리눅스에서는 위 두 장치로 랜덤을 발생시키기 위해 키보드, 마우스 같은 io 장치의 노이즈를 수집해서 비트 연산한다고 한다. 전자는 고른 난수를 발생 시킬 수 있어 보안에 강하지만 속도가 느리고 후자는 보안이 취약하지만 속도가 빠르다고 한다. 


자바 기본설정은 /dev/random을 사용한다. 이 설정은 jdk/jre/lib/security/java.security 파일을 열어보면 중간에

securityrandom.source=file:/dev/random

이라고 되어 있다.


결론을 말하면.. connection을 얻는 과정에서 /dev/random을 사용하고 /dev/random은 재대로 작동 안했다는거다.

위에 라인을 /dev/urandom으로 바꾸고 문제를 해결했다.


만약 서버급이라면... 이 방법은 좋은 해결 방법이라고 볼 수 없을 것긴하다.  io 디바이스가 안달려있는 서버는 더 큰 문제일것 같긴하지만 어짜피 connection을 많이 안만들테니....



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/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
글 보관함