JVM GC 최적화
JVM과 GC에 대해 지식이 있다는 가정하에 작성하였다.
GC와 JVM 기초는 대한 기본 동작 방식 소개는 이전 페이지를 보면 나와있다.
1. 명시적 GC 알고리즘 설정
필요한 GC 알고리즘을 명시적으로 지정해주는 것이 좋다.
예를 들어 Java 8에서 기본 GC는 병렬 GC이고 Java 11에서 기본값은 G1GC이다.
이는 명시적으로 GC를 설정하지 않는 한 Java 8에서 Java 11로 업그레이드할 때 더 좋든 나쁘든 간에 사용자와 의지와는 상관없이 변경됨을 의미한다.
-XX:+UseG1GC
2. Heap 크기 설정
-ms 와 -mx 옵션을 이용해서 힙 크기를 설정한다. 이러한 옵션으로 인하여 서버 안의 메모리의 최소, 최대를 조절할 수 있다. 간혹 -ms -mx와 같게 설정하시는 분들이 계시는데 사용량이 급격하게 많아지면 메모리 사용량의 변화가 있기 때문에 다르게 설정하는 것을 추천한다.
-ms 512m -mx 1024m
3. Perm 크기 설정
애플리케이션 클래스가 로딩되어 부족한 경우 OOM (Out of Memory)가 발생할 수 있다. 일반적인 사이즈로 64 ~ 256m 가 적당하다. 256m가 넘는다면 배포나 패키징을 한 번 의심해 볼 필요가 있다.
4. GC 로깅
GC가 발생할 때 모니터링을 하기 위해서 로그를 출력하는 옵션이다. 이렇게 옵션을 지정해주면 GC를 모니터링하기 편리하다. 아래와 같이 여러 가지 출력 옵션들이 있고 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps... 등으로 함께 사용 가능하다. 기본 옵션은 -XX:+PrintGCDetails 이다.
- -XX:+PrintGCDetails (기본 옵션)
- -XX:+PrintGCTimeStamps
- -XX:+PrintHeapAtGC
- -XX:+PrintGCDateStamps
-verbosegc
Visual VM
JVM을 모니터링을 도와주는 GUI 기반의 강력한 모니터링 도구이다.
1. VisualVM 실행
JAVA 디렉토리 bin 폴더에 보면 기본적으로 jvisualvm.exe 파일이 있을 것이다. 이것을 실행시켜주면 된다.
D:\>echo %JAVA_HOME%
D:\Program Files\Java\jdk1.8.0_271
D:\>cd D:\Program Files\Java\jdk1.8.0_271
D:\Program Files\Java\jdk1.8.0_271>jvisualvm.exe
D:\Program Files\Java\jdk1.8.0_271>
The launcher has determined that the parent process has a console and will reuse it for its own console output.
Closing the console will result in termination of the running program.
Use '--console suppress' to suppress console output.
Use '--console new' to create a separate console window.
2. Plugin 설치
Tools → Plugin 메뉴를 클릭하여 Plugins 창 화면을 열어준다. 여기에서 Available Plugins 탭을 클릭하여 Visual GC를 체크하여 설치하여 준다.
3.애플리케이션 실행
간단한 애플리케이션이 마땅히 없어서 로컬에 설치되어 있는 JMeter 실행해보았다.
실행되고 있는 JMeter을 클릭하여 Visual GC 탭을 클릭하면 어떻게 GC가 처리되고 있는지 볼 수가 있다.
'백엔드 > 성능 최적화' 카테고리의 다른 글
FastAPI 동기/비동기 동작 방식 분해해보기 (0) | 2024.04.05 |
---|---|
메모리 할당 기법 ptmalloc2 vs tcmalloc vs hoard vs jemalloc 비교 (0) | 2023.07.26 |
JVM 과 Garbage Collection 동작 방식 (0) | 2022.04.07 |
K6 성능 테스트 툴 (0) | 2022.03.31 |
인프라 관점의 성능 최적화 (0) | 2022.03.30 |