[JVM] GC 벤치마크 개요

[JVM] GC 벤치마크 개요

이번 장에서는 자신의 프로젝트의 GC 종류를 변경하면서 벤치마크를 진행해보고 서비스에 가장 적합한 GC를 선택해본다.

GC 목록

Serial GC

Parallel GC

Parallel Old GC (Parallel Compacting GC)

CMS (Concurrent Mark & Sweep GC)

G1GC (Garbage First)

ZGC

참고

EazyGC 사이트를 통해 로그를 분석하는 방법과 VisualVM을 통한 Heap & Thread Dump를 분석하는 방법과 nmonchart, pinpoint의 경우 추후에 따로 다루도록 한다.

Serial GC의 경우 서버에서는 사용하면 안되고 저사양 클라이언트 프로그램에만 사용해야하는 GC이지만 서버에서 사용할 경우 얼마나 성능이 나빠지는지 확인하기 위해 목록에 추가하였다.

ZGC의 경우 최근에 나온 GC로써 경우에 따라 기존에 가장 성능이 좋았던 G1GC보다 우월하게 성능이 좋다는 벤치마크 결과가 있어서 추가하였다.

단, 우리의 서비스는 JDK 8 환경에서 작동하는데 G1GC의 경우 Java 9부터 Default가 되었고 ZGC의 경우 Java 11에 추가되었다. G1GC와 ZGC의 경우 Java 11 환경에서 테스트를 진행한다.

단, 우리의 서비스는 JDK 8 환경에서 작동하는데 G1GC의 경우 Java 9부터 Default가 되었고 ZGC의 경우 Java 11에 추가되었다. G1GC와 ZGC의 경우 Java 11 환경에서 테스트를 진행한다. 벤치마크를 진행하고 문서들을 참고하면서 간략하게 JVM 이란? Heap & GC 에 대한 정보를 정리해두었다.

에 대한 정보를 정리해두었다. 벤치마크를 진행하면서 문서들을 참고하여 GC 종류별 작동 방식 을 정리해두었다. ZGC의 경우 작동원리가 명확히 파악되지 않아서 관련된 이미지 파일과 링크를 첨부해두었다.

을 정리해두었다. ZGC의 경우 작동원리가 명확히 파악되지 않아서 관련된 이미지 파일과 링크를 첨부해두었다. 벤치마크의 형평성을 위하여 설정 (JAVA_OPTS)에 GC를 선택하는 부분을 제외한 GC 성능 관련 옵션을 사용하지 않았으며 자동으로 JVM에서 설정하도록 두었다.

VisualVM

MAT

Nmon : 서버 Resource 모니터링

: 서버 Resource 모니터링 Pinpoint

Jmeter

EasyGC : GC로그를 통한 분석 사이트

from http://imprint.tistory.com/36 by ccl(A) rewrite - 2021-12-23 11:01:18