[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"