metaspace 실험 전 공부할 개념들
1. JVM Metaspace 기본
- used, committed, reserved, max 차이
Metaspace used 120930K, committed 122496K, reserved 221184K
- Class 영역과 Non-Class 영역
- 클래스 로딩·언로딩 조건
- ClassLoader가 살아 있으면 클래스가 해제되지 않는 이유
- MaxMetaspaceSize 상향이 즉시 RSS 증가를 뜻하지 않는 이유
2. 측정 도구 역할 구분
- Actuator/Prometheus: 전체 Metaspace의 시계열과 피크 확인
- jstat: Actuator가 열리기 전 기동 구간 관찰
- jcmd VM.metaspace: ClassLoader별 사용량 확인
- jcmd VM.classloader_stats: ClassLoader별 클래스 개수 확인
- 패키지별 클래스 개수는 메모리 사용량 자체가 아니라 후보 선정용 대리지표라는 점
3. 실험 설계
- 한 번에 변수 하나만 변경
- A/B/C/D 빌드 관계
- 동일한 콜드 스타트와 워밍업 조건
- 한 번의 수치 대신 최소 3회 반복
- 평균뿐 아니라 최대값과 중앙값 기록
- 128MB 상한에 잘린 측정값은 실제 요구량보다 작을 수 있다는 점
4. 변경 대상 이해
Layout Dialect:
- Groovy가 왜 전이 의존성으로 포함되는지
- layout:decorate, layout:fragment를 무엇으로 대체할지
- 대체 후 템플릿 중복과 유지보수성이 나빠지지 않는지
OpenFeign:
- Feign client별 child ApplicationContext가 무엇을 생성하는지
- 클래스는 같은 ClassLoader에 한 번 로딩된다는 점
- RestClient 전환 시 오류 처리, 인증, multipart, timeout을 어떻게 보존할지
- Spring Cloud BOM 제거가 가능한지