본문 바로가기
개발공부/Java

[JVM] Metaspace 옵션(MinMetaspaceFreeRatio/MaxMetaspaceFreeRatio) 관련 정리 내용

by sangyeon 2022. 9. 14.
728x90

Metaspace 설정 관련하여 하기 내용에 대하여 어떤 의미인지 알고자함

- MetaspaceSize

- MinMetaspaceFreeRatio

- MaxMetaspaceFreeRatio

 

★ MetaspaceSize= (default value는 서버마다 다름) 

: 처음 초과할 때 가비지 수집을 트리거할 할당된 클래스 메타데이터 공간의 크기를 설정(최초 이값을 넘어가면 GC가 일어남)

 

★ MinMetaspaceFreeRatio (default 40)

: 가비지 수집 후에 사용할 수 있어야 하는 메타스페이스 메모리 영역의 최소 백분율입니다. 남은 메모리 양이 임계값 미만이면 Metaspace 영역의 크기가 조정됩니다.

 

★ MaxMetaspaceFreeRatio (default 70)

: 가비지 수집 후에 사용할 수 있어야 하는 Metaspace 메모리 영역의 최대 백분율입니다. 남은 메모리 양이 임계값을 초과하면 Metaspace 영역의 크기가 조정됩니다.

 

여기서 Ratio 관련 설정이 조금 이해하기 힘들다. 아무리 여러 사이트에서 확인을 해보아도 해당 설정에 대한 정확한 동작방식에 대해서 설명해주는 곳은 없다.

그래서 내가 이해한 내용을 적어보자면 아래와 같다.

 

Min/Max Ratio는 결국 Metaspace를 최적화하기 위하여 영역의 크기를 조정하는 것으로, default 값으로 예시를 들면 아래와 같다.

※ 설정 값 예시

- MetaspaceSize=1G

- MinMetaspaceFreeRatio=40

- MaxMetaspaceFreeRatio=70

 

① Metaspace 사용량이 1G를 초과하여 FGC 발생

② 만약 FGC 이후 확보된 여유 Metaspace가 300MB일 경우, "MinMetaspaceFreeRatio=40" 설정에 의하여

    여유 Metaspace가 400MB가 되도록 100MB 증가시킨다. (총 MetaspaceSize=1.1G가 됨)

    ※ 반대로, FGC 이후 확보된 여유 Metaspace가 400MB 이상일 경우에는 이미 여유량이 총 Metaspace의 40%가

    확보되었기 때문에 따로 Metaspace 영역이 증가하지 않고 동일하게 유지된다(1G)

③ 반대로 FGC 이후 확보된 여유 Metaspace가 800MB일 경우, "MaxMetaspaceFreeRatio=70" 설정에 의하여 

    여유 Metaspace가 700MB가 되도록 Metaspace영역(1G)에서 100MB를 감소시킨다. (총 MetaspaceSize=0.9G)

 

만약, MaxMetaspaceSize를 설정하지 않으면 default로 unlimited이기 때문에,

OS Native 영역의 메모리를 전부 사용할 수도 있기 때문에 Min/Max MetaspaceFreeRatio 설정을 통해 Metaspace영역의 크기를 적절하게 유동적으로 세팅하는 것이 좋다.

 

 

728x90