-
구동 시 오류 DirectJDKLog.java:173 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [406,307] milliseconds.개발 2020. 6. 4. 17:37
DEBUG BasicTilesContainer.java:213 Render request received for definition 'login' DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG BasicTilesContainer.java:213 Render request received for definition 'login' DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers WARN DirectJDKLog.java:173 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [406,307] milliseconds. WARN DirectJDKLog.java:173 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [346,373] milliseconds. DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers DEBUG QuartzSchedulerThread.java:291 batch acquisition of 0 triggers
서버를 배포 후 웹에 접근 자체가 지연된다.
처음엔 방화벽 문제인줄 알고 설정을 뒤졌지만 서버를 접근되는데 로딩만 길어지는 현상이라 패스...
역시 로그를 봐야한다.ㅠㅜ
Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [406,307] milliseconds
이것만 검색해도 금방 결과가 나옴...
결론은
서비스 실행 명령어에 java option을 추가해줘야한다.
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
설정을 수정하면 서버 페이지가 금방 올라오는 것을 확인할 수 있다.
원인
리눅스의 /dev/random 디바이스는 랜덤 비트의 풀이며 entropy pool이라 불린다.
이의 기능은 사용자의 입력신호를 받아 난수로 변환 후 (entropy pool에) 저장한다.
(entropy pool - (난수) 키보드, disk I/O, 마우스 click 등)
그 과정에서 default size만큼 bit가 충분하지 않다면 /dev/random은 블로킹된다.
자바의 SecureRandom 클래스가 session ID를 생성할 때 /dev/random을 사용하며 블로킹 상태에 빠진다.
이를 해결하기 위해 /dev/random 대신 /dev/./unrandom을 사용한다.
( /dev/unrandom 으로 설정 시 /dev/random으로 인식)
서버가 한번 띄워지면 I/O가 빈번하게 일어나 Entropy pool에 비트가 충분히 채워지므로 블로킹이 발생하지 않은 상황이다.
* /unrandom 으로 경로를 바꿔주는 작업은 블로킹 문제가 발생했을 경우에만 사용한다.
출처
'개발' 카테고리의 다른 글
AWS mariaDB 생성하기(feat. Freetier, 파라미터 그룹 생성) (0) 2020.06.07 Node Express JS 로 서버 만들기 (0) 2020.06.05 git start (0) 2020.05.28 npm install ERROR (0) 2020.05.28 Ubuntu 서버 외부 접근 시 화면이 노출안된다면 (0) 2020.05.20