Tomcat 부팅속도 너무 느린문제
tomcat을 여러번 stop & start 했더니 다음과 같은 에러가 발생
connection이 실패 했다..?
-> tomcat이 사용하는 8080과 사용하는 것 같은 다른포트들은 열려있는데 정작 톰캣 서버포트인 30005가 열려있지 않았다
-> connectionExceptiondms 톰캣 서버가 뜨지 않아서 발생.
계속 기다려보니 약 765초만에 톰캣 서버가 뜸 -> 너무 느리다. 어떻게 하면 빠르게 할 수 있을까??
tomcat의 tld scanning 대상 jar 파일을 스킵한다.
-> tomcat은 tld(태그라이브러리)파일이 있는지 jar파일들을 탐색하는데 tld파일이 없는 jar파일은 scan 대상에서 skip하면 부팅속도가 빨라질 수 있다.
catalina conf의 logging.properties의 하단에
1
2org.apache.catalina.startup.ContextConfig.level = FINE
org.apache.jasper.servlet.TldScanner.level = FINE을 추가하고 로그를 확인한다. 로그에 tld파일이 없다고 나오는 jar파일들을 스킵.
-> 별다른 속도 향상이 없었다.
sudo yum install haveged를 한다.
-> 엔트로피 값을 발생시켜주는 haveged 패키지를 받아서 톰캣을 구동해본다.
-> haveged를 구동하고 톰캣을 실행하면 1.7초만에 뜬다..
상황이 발생한 이유 ??
war 파일을 구성하는데 무언가 랜덤 난수 값이 필요한대 이를 위한 엔트로피 값이 차지 않았다.
엔트로피 풀
리눅스에서는 난수를 발생시키기 위해 엔트로피풀을 사용한다. 엔트로피풀은 마우스나 키보드 와 같인 I/O입력 장치들이 생성해내는 신호를 비트로 표현하여 저장한다. 엔트로피 풀을 이용한 가상장치는 2가지가 있따.
- /dev/random
- /dev/urandom
/dev/random은 난수를 발생시키기 위한 엔트로피 풀의 비트가 모두 채워질때까지 난수를 발생시키지 않고 block.
/dev/urandom은 현재 있는 엔트로피풀의 비트값으로 난수를 생성시킨다.
결론 -> 난수값 발생을 위한 엔트로피 값이 필요한 작업이 있을때 I/O가 일어나지 않는 환경에서는 이 값이 차길 기다리는 동안 blocking이 발생할 수 있다.