서버 배포를 위해 JAR 파일을 교체하고 중단스크립트를 실행했으나 간헐적으로 종료가 오래 걸려 로그를 확인해봤다.

 

로그엔

Failed to stop bean 'webServerGracefulShutdown' 

java.lang.NoClassDefFoundError: org/springframework/boot/web/server/GracefulShutdownResult 

"GracefulShutdownResult" 해당 클래스를 찾을 수 없는것이 원인으로 보였다.

 

구글링 결과 원인을 정리해보면 아래와 같다.

 

1. JVM은 jar 파일을 메모리에 올릴 때, 클래스 로딩을 필요할 때마다(load on demand) 한다.

2. 근데 실행 도중 jar 파일을 바꿔버리면,

3. JVM이 나중에 어떤 클래스를 로드하려 할 때 해당 클래스 파일이 없음 → NoClassDefFoundError 터짐.

4. 스프링은 역할대로 shutdown을 하려다가, 필요한 클래스가 없으니까 실패.

 

 

 

같은 이유로, 실행중인 JAR를 교체하거나 이름을 변경하지 말자.

https://stackoverflow.com/questions/65090165/graceful-shutdown-fails

+ Recent posts