JVM Warm Up 요청 딜레이 줄이기

phantom0308
Sep 7, 2023

--

배포 후 서버가 실행된 후, 혹은 서버의 요청이 없는 IDLE 상태로 1~2시간이 경과한 경우에 첫 번째 요청 또는 새로운 요청이 발생하면 Response Time오래 걸리는 이슈 발생.(첫 response 20s 이상)

  • Bootstrap Class Loading : Java 코드와 java.lang.Object 와 같은 필수 클래스를 메모리에 로드함
  • Extension Class Loading : java.ext.dirs 경로에 있는 모든 JAR 파일을 로드함(개발자가 수동으로 JAR을 추가하는 경우)
  • Application Class Loading : 애플리케이션 클래스 경로에 있는 모든 클래스를 로드함

스프링 부트에서의 Warm Up 방법

지연 로딩을 하는 클래스들을 미리 Warm Up 하려면 스프링 부트 애플리케이션이 정상적으로 초기화된 후에 Warm Up 을 수행하여야 한다. 스프링 부트에서는 간단히 ApplicationListener 의 onApplicationEvent()구현체를 통해 Warm Up 프로세스를 만들 수 있다.

@Component
public class ApplicationStartup implements ApplicationListener<ApplicationReadyEvent> {

// ApplicationReadyEvent가 호출될 때 실행되는 메소드
@Override
public void onApplicationEvent() {

// 클래스 Warm Up 수행

}
}

service의 메소드를 호출하여 클래스들을 미리 메모리에 캐싱하도록 하였다.

--

--