1. 환경
- Redhat OS, Oracle 11g, Resin, JAVA, 솔루션
2. 증상
- Java로 개발된 Solution Parallel 20개 실행시 DB Connect 및
증상적인 접속과 Query가 아주 느림 (약 6분 이상 소요)
- PC에 CentOS설치시 테스트시에는 정상
- 전용 x86 Server의 위 환경에서는 계속 Delay 발생
- Oracle listener.log에는 정상적으로 20개 Session 접속이 되는 것으로
logging이 되나 실질적으로 사용하는 솔루션 log는 하나씩 하나씩
생성이 되고 있음.
3. 원인
리눅스에서 난수 생성시 속도가 떨어지는 이유는
/dev/random 을 사용하는데, /dev/random은 Blocking Mode로 작동합니다. (/dev/urandom 은 NonBlocking)
결론은 리눅스의 난수 발생 로직이 좀 느리다는 겁니다.
JDK는 urandom 보다는 random을 사용하고 있습니다.
lsof {해당프로세스 ID} 치면 현재 프로세스가 어떤 자원을 사용하고 있는지 나옵니다.
리눅스에서도 /dev/random, /dev/urandom 둘다 쓰고 있는 것 같은데, random을 더 우선시 하는 것으로 보입니다.
리눅스에서 랜던값 생성하는데, 시간이 오래 걸리는 문제에 대한 개선방안입니다.
${JAVA_HOME}/jre/lib/security/java.security 파일을 열어보면 다음과 같은 라인이 있습니다.
AS-IS
securerandom.source=file:/dev/urandom
이것을 다음과 같이 수정해 주시면 됩니다.
TO-BE (// 두 개 추가, /dev/random 이 아니라 /dev/urandom을 사용함)
securerandom.source=file:///dev/urandom
또는 해당 WAS 실행 옵션에 다음과 같이 추가해 주어도 되나, 위의 방법을 권장해 드립니다.
-Djava.security.egd=file:///dev/urandom
4. References
- http://demo.initech.com/index.php?document_srl=11395&mid=INISAFE_Crypto
댓글 없음:
댓글 쓰기