거북이-https://velog.io/@violet_evgadn 이전완료

(에러) Tomcat 시작 막힘 본문

웹 개발/Tomcat

(에러) Tomcat 시작 막힘

VioletEvgadn 2023. 1. 30. 09:50

에러 내용

개발 서버의 Tomcat을 재시작하는데 아래 문구가 마지막으로 뜨면서 Tomcat이 시작되지 않았다.

...
INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 793 ms

분명 Server startup이라고 되어 있고 이전 단계에서 어떠한 에러가 발생한 것도 아닌데 서버가 기동되지 않는 것을 보고 이상하다 생각하며 다시 시작시켜봤지만 여전히 저 문구에서 더 이상 서버 기동이 진행되지 않았다.

 

Catalina.start 문구를 보았을 때 Catalina 쪽에서 생긴 문제라고 생각하였고 많은 시간의 구글링을 통해 원인과 해결 방법을 찾아냈다.


에러 이유

Linux에서 random 함수를 사용하는 경우 기본적으로는 /dev/random이라는 Device를 활용한다.

이 /dev/random을 Entropy pool이라고 부른다.

 

문제는 Entropy pool에서 난수를 생성하거나 기타 작업을 수행하는 과정에서 Bit(공간)가 충분하지 않다면 /dev/ranodm은 Block 상태로 변한다.

만약 Entropy Pool이 Block 상태로 변한다면 충분한 Bit를 확보하기 위한 과정이 수행되어야 한다.

 

Tomcat 구동시에도 Random 값을 많이 생성하는데 대표적으로 Session ID를 생성할 때 SecureRandom 클래스를 이용하며 이 경우 기본적으로는 /dev/random을 이용한다.

 

문제는 Tomcat 구동 시 Bit Size가 충분하지 않으면 Blocking되므로 Default Size만큼 Bit를 확보하기 위한 작업이 필요하고 이 동안 Tomcat 구동이 중지 되는 것이다.

 

이런 이유 때문에 Tocmat 재시작시 Stuck이 걸리며 다음 단계로 진행되지 않는 것이다.

 

이를 해결하기 위해 "haveged" 패키지를 설치하여 Entorpy Pool을 관리하는 해결 방법이 존재하며 Blocking이 되지 않는 /dev/./urandom을 활용하는 2가지 방법 중 하나를 사용할 수 있다.

 

"haveged" 패키지를 설치하면 보안상 안전하기는 하겠지만 메모리를 추가로 사용해야한다.

위 에러는 "개발 서버"에만 생기는 문제였고 개발 서버는 메모리가 항상 부족한 상태이고 DB에 개인 정보가 들어가있지는 않았으므로 /dev/./urandom을 사용하는 방법으로 해결하였다.


해결 방법

1. Tomcat 디렉터리에 존재하는 bin 디렉터리로 이동

cd [Tomcat 경로]/bin

2. catalina.sh를 VI Editor로 열기

vi catalina.sh

3. JAVA_OPTS에 "file:/dev/./urandom" 문구 추가

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"

catalina.sh를 보면 위 문구가 존재할 것이다.

여기에 -Djava.security.egd=file:/dev/./urandom 문구를 추가해주자.

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Djava.security.egd=file:/dev/./urandom"

4. 수정한 catalina.sh 수정 후 Tomcat 재시작


참고한 사이트

 

'웹 개발 > Tomcat' 카테고리의 다른 글

Tomcat 설정 파일  (0) 2023.02.28
IntelliJ에서 외장 Tomcat 연동 방법  (0) 2023.02.14
Comments