JVM Warm Up

JVM Warm Up

Last modified on 2025-04-18 , by hjjae2

카카오 계정 서버의 API 배포 과정 #

Rolling update

Application Ready - Warm Up 사이에 n초 delay를 줄 수 있다.


Compilation Level #


JIT #

위 과정에서 C1, C2는 별도 쓰레드로 동작한다.


C2 컴파일러의 큐가 가득차면, C1의 Level2 로 컴파일한다. 이후 여유가 생기면 Level3, 4 컴파일 처리가 진행된다.

Level2 컴파일이 많이 발생한다면, C2 컴파일러 큐가 가득찼다는 것을 알 수 있겠다. 이때는 C2 컴파일러 쓰레드 수를 조정할 필요가 있겠다.


Code Cache #

초기 캐시 사이즈와 최대 사이즈 조정이 가능하다.

코드 캐시가 가득차면 성능 상 이점을 볼 수 없다. 아래와 같은 메시지가 발생하면 사이즈를 늘려주어야 한다.

카카오 계정 서버에서는 위 메시지는 발생하지 않았다. 기본 값을 그대로 사용했다. (기본 값은 몇인지 확인해보자.)


Compilation Level Threshold #

다음의 지표들을 확인해볼 수 있다.

  • InvocationThreshold : 메서드 호출 수
  • BackEdgeThreshold : 메서드 내 반복문 수
  • CompileThreshold : InvocationThreshold + BackEdgeThreshold (?)

JIT Log #

아래 옵션을 활성화하여 컴파일 로그를 확인할 수 있다.


결론 #

카카오 계정 서버에서는 다음과 같이 지표를 확인했다.

warm up 시간도 고려해야 하기 때문에 결론적으로 250번 진행하는 것을 선택했다. (지연 문제가 발생하지 않는 선에서, 짧은 시간 선택)