톰캣 부팅속도 빠르게

Tomcat 부팅속도 너무 느린문제

tomcat을 여러번 stop & start 했더니 다음과 같은 에러가 발생

connection이 실패 했다..?

-> tomcat이 사용하는 8080과 사용하는 것 같은 다른포트들은 열려있는데 정작 톰캣 서버포트인 30005가 열려있지 않았다

-> connectionExceptiondms 톰캣 서버가 뜨지 않아서 발생.

계속 기다려보니 약 765초만에 톰캣 서버가 뜸 -> 너무 느리다. 어떻게 하면 빠르게 할 수 있을까??

  1. tomcat의 tld scanning 대상 jar 파일을 스킵한다.

    -> tomcat은 tld(태그라이브러리)파일이 있는지 jar파일들을 탐색하는데 tld파일이 없는 jar파일은 scan 대상에서 skip하면 부팅속도가 빨라질 수 있다.

    • catalina conf의 logging.properties의 하단에

    • 1
      2
      org.apache.catalina.startup.ContextConfig.level = FINE
      org.apache.jasper.servlet.TldScanner.level = FINE

      을 추가하고 로그를 확인한다. 로그에 tld파일이 없다고 나오는 jar파일들을 스킵.

      -> 별다른 속도 향상이 없었다.

  2. sudo yum install haveged를 한다.

    -> 엔트로피 값을 발생시켜주는 haveged 패키지를 받아서 톰캣을 구동해본다.

    -> haveged를 구동하고 톰캣을 실행하면 1.7초만에 뜬다..

상황이 발생한 이유 ??

war 파일을 구성하는데 무언가 랜덤 난수 값이 필요한대 이를 위한 엔트로피 값이 차지 않았다.

톰캣 엔트로피

엔트로피 풀

/dev/random

리눅스에서는 난수를 발생시키기 위해 엔트로피풀을 사용한다. 엔트로피풀은 마우스나 키보드 와 같인 I/O입력 장치들이 생성해내는 신호를 비트로 표현하여 저장한다. 엔트로피 풀을 이용한 가상장치는 2가지가 있따.

  1. /dev/random
  2. /dev/urandom

/dev/random은 난수를 발생시키기 위한 엔트로피 풀의 비트가 모두 채워질때까지 난수를 발생시키지 않고 block.

/dev/urandom은 현재 있는 엔트로피풀의 비트값으로 난수를 생성시킨다.

결론 -> 난수값 발생을 위한 엔트로피 값이 필요한 작업이 있을때 I/O가 일어나지 않는 환경에서는 이 값이 차길 기다리는 동안 blocking이 발생할 수 있다.

공유하기