힙은 남았는데 서비스가 멈췄다 · GC 로그를 읽는다 · 퀴즈
퀴즈: 힙과 GC 로그
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
메모리 8GB 기계에서 -Xmx 없이 JVM 을 띄웠다. 문서의 기본 규칙으로 최대 힙은?
- 8GB — 기계 메모리 전부를 힙으로 쓴다
- 4GB — 기계 메모리의 절반을 힙으로 쓴다
- 2GB — MaxRAMPercentage 기본 25%
- 128MB — 어떤 기계에서든 같은 고정 기본값
GC 로그 한 줄 `GC(7) Pause Young (Normal) (G1 Evacuation Pause) 40M->12M(64M) 3.2ms` 에서 3.2ms 는?
- JVM 기동 뒤 경과 시간
- 애플리케이션 스레드가 멈춘 시간
- GC 사이의 간격
- 힙이 줄어드는 데 걸린 평균 시간
옛 -XX:+PrintGCDetails 에 해당하는 통합 로깅 옵션은?
- -Xlog:gc
- -Xlog:gc+heap=trace
- -Xlog:gc*
- -verbose:gc
문서가 Serial 컬렉터를 권하는 상황은?
- 정지 시간 목표를 확률적으로 맞춰야 하는 큰 힙
- 단일 프로세서 기계나 약 100MB 까지의 작은 데이터
- 다중 프로세서에서 처리량이 최우선일 때
- 메타스페이스가 자주 차는 애플리케이션
jstat -gc 출력에서 FGC 열이 1분에 몇 번씩 오른다. 무엇을 뜻하는가?
- Young GC 가 잦다 — 할당이 많다
- 생존 공간이 비어 있다
- 메타스페이스가 커지고 있다
- Full GC 가 반복된다 — Old 영역이 계속 찬다
설정 파일에는 -Xmx4g 라고 적혀 있는데 JVM 이 실제로 쓰는 최대 힙을 확인하는 명령은?
- jcmd <pid> VM.flags — 적용된 -XX:MaxHeapSize= 를 본다
- jcmd <pid> Thread.print — 스레드마다 힙을 본다
- jstat -gc <pid> — GCT 열이 최대 힙이다
- java -version — 기본 힙이 찍힌다