ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구동 시 오류 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 으로 경로를 바꿔주는 작업은 블로킹 문제가 발생했을 경우에만 사용한다.

     

    출처

    https://lng1982.tistory.com/261

Designed by Tistory.