목차

Tomcat 구동시 오래 걸리는 현상 해결

[2019-07-19 17:41:39] [info] Deploying web application directory [/data/koov.net/jsp/ROOT]
[2019-07-19 17:41:39] [info] At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
[2019-07-19 17:42:34] [warning] Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [54,125] milliseconds.
[2019-07-19 17:42:34] [info] Deployment of web application directory [/data/koov.net/jsp/ROOT] has finished in [55,040] ms
[2019-07-19 17:42:34] [info] Starting ProtocolHandler ["http-nio-8080"]
[2019-07-19 17:42:34] [info] Starting ProtocolHandler ["ajp-nio-8009"]
[2019-07-19 17:42:34] [info] Server startup in [55,135] milliseconds

위와같이 Tomcat 구동시 TLD 관련 메세지 이후 매우 오랜시간이 지난 후에
Creation of SecureRandom instance for session ID generation using [SHA1PRNG]
로그를 찍으면서 톰캣이 구동되는 현상이 발생한다.

이유는 Tomcat이 구동될때 랜덤 생성기로 Session ID값을 만드는데 리눅스에 기본적으로 Java 에서 랜덤 생성하는 방식이 /dev/random을 이용하기 때문이다.

/dev/random은 랜덤 비트의 풀이며 Entropy pool 이라고 부른다.
사용자 입력 신호(키보드, disk I/O, 마우스 click등)가 Entropy pool에 비트의 형태로 저장이 되고 난수를 생성할 때 Entropy pool에 default size만큼의 bit가 충분하지 않다면 /dev/random은 블로킹 된다.

부팅된지 얼마 안된 시스템일수록 이런 현상이 발생할 확률이 높다는것이다.

해결방법

JAVA옵션에 아래와 같은 인수를 추가해주도록 한다.

JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"

참조링크