본문 바로가기
platform_infra_cloud/java_runtime

Spring Boot에서 JVM 설정 최적화 가이드

by 죄니안죄니 2025. 4. 19.

들어가며

Spring Boot는 편리한 설정과 빠른 개발 속도로 널리 사용되지만, JVM 옵션을 기본값 그대로 사용하는 경우 실제 서비스 환경에서 성능 병목이 발생할 수 있습니다.
특히 메모리 사용량, GC 동작 방식, 스레드 수 제한, 리소스 오버헤드 등의 문제는 JVM 설정을 통해 조절할 수 있으며, 애플리케이션의 응답 속도, 안정성, 확장성에 직결됩니다.

이 글에서는 Spring Boot 기반 애플리케이션을 대상으로 JVM 최적화 설정의 기본 원리, 실전 적용 예시, 추천 옵션 템플릿을 단계별로 정리합니다.

 

1. 왜 JVM 설정이 중요한가?

  • Spring Boot는 기본적으로 Fat Jar 구조로 실행 → JVM 위에서 독립 실행
  • 설정하지 않으면 JVM은 시스템 자원의 일부만 사용하며, GC 설정도 보통 기본값(G1GC, ParallelGC) 사용
  • 실무에서는 메모리 부족, GC 지연, OOM, 스레드 과다 생성 등의 문제가 JVM 튜닝으로 해결됨
 

2. 자주 사용하는 JVM 옵션

기본 구성 예시:

java \
 -Xms512m -Xmx512m \            # 힙 메모리 설정
 -XX:+UseG1GC \                 # GC 방식 설정
 -XX:MaxGCPauseMillis=100 \     # G1GC 지연 시간 목표
 -XX:+HeapDumpOnOutOfMemoryError \  # OOM 시 덤프 저장
 -XX:HeapDumpPath=./heapdump.hprof \ # 덤프 위치 지정
 -Xlog:gc*:file=./gc.log:time,uptime,level,tags \ # GC 로그
 -jar my-spring-app.jar

설명 요약

옵션 설명
-Xms, -Xmx Heap 메모리 초기/최대 크기 설정
-XX:+UseG1GC G1GC는 Spring Boot에 기본 적합한 GC 방식
-XX:MaxGCPauseMillis 지연 시간 기준 목표 (G1GC용)
-Xlog:gc* GC 로그 수집 (JDK 9 이상)
-XX:+HeapDumpOnOutOfMemoryError OOM 발생 시 메모리 덤프 생성
 

3. 실전 JVM 튜닝 포인트

1️⃣ 메모리 설정 (Heap, Metaspace)

-Xms1024m -Xmx1024m            # 작은 환경: 512~1024m 권장
-XX:MaxMetaspaceSize=256m     # 클래스 메타 영역 제한

JVM은 힙 외에도 Metaspace, Stack, CodeCache 등 다양한 공간을 사용하므로 전체 서버 메모리 고려 필요

2️⃣ GC 튜닝

-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=30

G1GC는 대부분의 Spring Boot 앱에 적합. ZGC는 초대형/지연 민감 서비스에서만 고려

3️⃣ 쓰레드 수 제한

-XX:ParallelGCThreads=4
-XX:ConcGCThreads=2

GC 관련 스레드가 과다 생성되면 CPU 병목 발생 가능 → 실제 CPU 코어 수에 맞춰 설정

 

4. Spring Boot 실행 스크립트에 반영하기

application.sh 예시

#!/bin/bash
JAVA_OPTS="-Xms1024m -Xmx1024m \
 -XX:+UseG1GC \
 -XX:MaxGCPauseMillis=100 \
 -Xlog:gc*:file=./logs/gc.log:time,level,tags"

java $JAVA_OPTS -jar my-spring-app.jar

빌드/배포 자동화 도구(Jenkins, Docker 등)와 연계 시 JAVA_OPTS만 바꿔도 환경별 조정 가능

 

5. 실전 점검 팁

  • 메모리 사용량 확인: jstat -gc <PID>, VisualVM, JMX, Prometheus exporter
  • GC 로그 분석: gc.log → GCViewer, GCEasy.io 등 도구 사용
  • OOM 방지: 반드시 HeapDumpOnOutOfMemoryError 설정할 것
  • Container 환경일 경우: -XX:+UseContainerSupport (JDK 10+ 자동 적용)
 

마치며

Spring Boot는 JVM 위에서 실행되는 구조이기 때문에, JVM 설정을 잘 다루는 것이 곧 운영 안정성과 성능 최적화의 핵심입니다.
JVM 옵션은 처음에는 복잡하게 느껴지지만, 기본 메모리 조정 + GC 정책 + 로그 수집만 설정해도 큰 효과를 볼 수 있습니다.

📂 platform/java 카테고리에서는 다음 주제로:

  • GC 로그 실시간 분석 도구 사용법
  • Spring Boot + Docker 환경의 JVM 튜닝
  • OOM 예외 상황에서 Heap Dump 분석하기

를 이어서 다룹니다.

 


📌
 이전 글 다시보기

👉 GC의 종류와 튜닝 전략 (G1GC, ZGC, ParallelGC)

📌 다음 글 미리보기
👉 java -jar 실행 시 환경 변수 구성법

📚 Java_runtime 시리즈 전체 보기
👉 https://jobreview.tistory.com/category/platform_infra_cloud/java_runtime

댓글