엔지니어링

[LINUX] 가상 서버에서 tomcat 구동시 오래 걸리는 경우

Rey 2018. 3. 16. 16:21

가상서버(오픈 스택으로 구축한 private 클라우드던 AWS같은 public 클라우드던)에서 tomcat을 구동하는 경우 Spring Framework 같은 프레임워크나 아니면 그냥 Servlet으로 개발을 할때 오래 걸리는 경우가 있는데 이러한 경우 해결 방법은 아래와 같다.


haveged 패키지 설치 혹은 JAVA_OPTS에 -Djava.security.egd=file:/dev/./urandom 을 추가


오래 걸리는 이유는 리눅스의 경우 random 함수를 사용하는 경우 /dev/random 디바이스를 이용해서 수행을 한다.



이 /dev/random은 랜덤 비트의 풀인데 이를 Entropy pool이라고 부른다.


사용자의 입력 신호(키보드, Disk I/O, 마우스 Click등)가 Entropy pool에 비트 형태로 저장이 되고 난수 생성 시 Entropy pool에 default size만큼 bit가 충분하지 않다면 /dev/random은 블로킹 상태가 된다.


tomcat 구동시에 session ID 등을 생성할 때 SecureRandom 클래스를 이용하는데 이 경우 기본은 /dev/random을 이용을 한다.


그런데 tomcat 구동 시에 Entropy Pool에 bit size가 충분 하지 않으면 블로킹 되어 default size 만큼 bit를 확보함으로 해당 시간 동안 tomcat에 web app 로딩은 지연이 되게 된다.


방법은 haveged 패키지를 설치하여 Entropy Pool을 관리하던가 아니면 블로킹이 되지 않는 /dev/urandom을 이용하는 것이다.

'엔지니어링' 카테고리의 다른 글

MySQL LAST_INSERT_ID  (0) 2018.03.20
[LINUX] /etc/fstab 옵션  (0) 2017.06.05
[NGINX] Reverse Proxy 사용시 Backend Server에 Origin URI 전달  (0) 2017.06.04