본문 바로가기
language/java

Java JVM 옵션 기초(-Xms, -Xmx 등) 완벽 이해하기

by 죄니안죄니 2026. 5. 26.
반응형

Java JVM 옵션 기초(-Xms, -Xmx 등) 완벽 이해하기

Java 서버를 실행하다 보면 반드시 보게 되는 것이 바로:

 
-Xms
-Xmx
-XX:+UseG1GC
 

같은 JVM 옵션입니다.

특히 실무에서는:

  • Spring Boot 서버 운영
  • Kubernetes 메모리 제한
  • GC 튜닝
  • OOM 대응
  • 성능 최적화

까지 JVM 옵션이 매우 중요합니다.

초보 시절에는 보통:

메모리 옵션 정도?
 

로만 이해하기 쉽습니다.

하지만 실제로는 JVM 옵션 하나로:

  • GC 동작 방식
  • Heap 크기
  • Stop-The-World 시간
  • 서버 응답속도
  • OOM 발생 여부

까지 크게 달라질 수 있습니다.

이번 글에서는:

  • -Xms / -Xmx
  • Heap 관련 옵션
  • GC 옵션
  • Metaspace 옵션
  • GC 로그 옵션
  • 실무 서버 설정

까지 운영 관점으로 깊게 정리해보겠습니다.


1. JVM 옵션이란?

JVM 옵션은:

JVM 실행 동작을 제어하는 설정값

입니다.

즉:

메모리
GC
JIT
로그
스레드
 

등을 제어 가능.


2. JVM 옵션 실행 예시

대표 실행:

 
java -Xms1g -Xmx2g -jar app.jar
 

설명:


옵션 의미
java JVM 실행
-Xms1g 초기 Heap 1GB
-Xmx2g 최대 Heap 2GB
-jar jar 실행 옵션
app.jar 실행 파일

3. JVM 옵션 종류

크게:


종류 설명
Standard 옵션 기본 JVM 옵션
-X 옵션 비표준 확장 옵션
-XX 옵션 고급 튜닝 옵션

4. 가장 중요한 옵션: -Xms

 
-Xms
 

는:

초기 Heap 메모리 크기

입니다.


5. 예시

 
-Xms512m
 

의미:

JVM 시작 시 Heap 512MB 확보
 

6. -Xmx란?

 
-Xmx
 

는:

최대 Heap 메모리 크기

입니다.


7. 예시

 
-Xmx2g
 

의미:

Heap 최대 2GB까지 사용 가능
 

8. 왜 중요할까?

Heap 부족 시:

OutOfMemoryError
 

발생 가능.

반대로 너무 크면:

GC Pause 증가
 

가능.


9. 실무에서 자주 하는 설정

대표 설정:

 
-Xms2g -Xmx2g
 

즉:

초기값 = 최대값
 

동일하게 맞춤.


10. 왜 동일하게 맞출까?

Heap 확장 과정 비용 제거 목적.

만약 다르면:

Heap 부족
↓
Heap 확장
↓
추가 비용 발생
 

가능.


11. Heap 너무 크게 잡으면 안 되는 이유

많은 초보자가:

Heap 크게 주면 무조건 좋다
 

생각.

하지만 문제:

Full GC 매우 오래 걸릴 수 있음
 

12. Young Generation 관련 옵션

대표 옵션:

 
-Xmn
 

13. -Xmn 의미

Young Generation 크기 지정
 

입니다.


14. 예시

 
-Xmn512m
 

의미:

Young 영역 512MB
 

15. Young 영역이 너무 작으면?

문제:

Minor GC 자주 발생
 

가능.


16. 반대로 너무 크면?

문제:

Old 영역 부족 가능
 

즉 균형 중요.


17. Metaspace 옵션

JDK8 이후 중요.

대표 옵션:

 
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
 

18. Metaspace란?

클래스 메타정보 저장 영역.

즉:

  • 클래스 정보
  • 메서드 정보
  • static 구조

저장.


19. Metaspace OOM 방지

대표 설정:

 
-XX:MaxMetaspaceSize=512m
 

20. GC 선택 옵션

매우 중요합니다.

대표:

 
-XX:+UseG1GC
 

21. 의미

G1GC 사용
 

입니다.


22. 다른 GC 옵션


옵션 의미
UseSerialGC Serial GC
UseParallelGC Parallel GC
UseG1GC G1GC
UseZGC ZGC

23. ZGC 사용 예시

 
-XX:+UseZGC
 

24. GC 로그 옵션

실무에서 매우 중요.

대표 옵션:

 
-Xlog:gc*
 

25. 의미

GC 상세 로그 출력
 

입니다.


26. 왜 GC 로그 중요할까?

GC 문제는:

로그 없으면 분석 거의 불가능
 

한 경우 많음.


27. Heap Dump 옵션

OOM 대응 핵심.

대표 옵션:

 
-XX:+HeapDumpOnOutOfMemoryError
 

28. 의미

OOM 발생 시 Heap Dump 생성
 

입니다.


29. Dump 저장 위치

 
-XX:HeapDumpPath=/dump
 

설명:


옵션 의미
HeapDumpPath Dump 저장 위치

30. JIT 관련 옵션

대표 옵션:

 
-XX:+PrintCompilation
 

의미:

JIT 컴파일 로그 출력
 

31. Stack 크기 옵션

대표 옵션:

 
-Xss
 

32. 의미

스레드 Stack 크기
 

입니다.


33. 예시

 
-Xss1m
 

의미:

Thread Stack 1MB
 

34. 왜 중요할까?

Thread 많으면:

Stack 메모리 총합 증가
 

가능.


35. Stack 너무 작으면?

문제:

StackOverflowError 가능
 

증가.


36. 서버 환경에서 중요한 옵션

대표 설정 예시:

 
java \
-Xms2g \
-Xmx2g \
-XX:+UseG1GC \
-Xlog:gc* \
-XX:+HeapDumpOnOutOfMemoryError \
-jar app.jar
 

37. 옵션 설명


옵션 설명
-Xms2g 초기 Heap 2GB
-Xmx2g 최대 Heap 2GB
UseG1GC G1GC 사용
Xlog:gc* GC 로그 출력
HeapDumpOnOOM OOM 시 Dump 생성

38. Kubernetes 환경 주의점

실무에서 매우 중요.

컨테이너 제한:

Container Memory Limit
 

보다 JVM Heap 크게 잡으면:

OOMKilled
 

가능.


39. 왜 위험할까?

JVM은 Heap 외에도 사용:

  • Metaspace
  • Thread Stack
  • Direct Memory
  • Native Memory

즉:

Heap = 전체 메모리 아님
 

40. 실무 메모리 계산 예시

예:

Container 4GB
Heap 3GB
 

이면 위험 가능.

Native 영역 부족 가능성 존재.


41. Direct Memory 옵션

NIO 환경 중요.

대표 옵션:

 
-XX:MaxDirectMemorySize
 

42. 언제 중요할까?

대표 사례:

  • Netty
  • Kafka
  • Elasticsearch

같은 고성능 IO 서버.


43. JVM 옵션 확인 방법

대표 명령:

 
jcmd PID VM.flags
 

설명:


요소 의미
jcmd JVM 진단 도구
PID 프로세스 ID
VM.flags JVM 옵션 조회

44. 실행 중 GC 확인

대표 명령:

 
jstat -gc PID 1000
 

설명:


요소 의미
jstat JVM 통계 도구
-gc GC 상태 출력
PID JVM 프로세스
1000 1초 간격(ms)

45. 실무에서 자주 하는 실수

1) Heap만 크게 설정

GC Pause 폭증 가능.

2) GC 로그 안 남김

장애 분석 매우 어려움.

3) Container Memory 고려 안 함

K8s 환경에서 OOMKilled 흔함.

4) 기본값 맹신

서비스 특성 따라 튜닝 필요.


46. 가장 중요한 핵심 한 줄

JVM 옵션은
“메모리·GC·성능 전략을 결정하는 서버 운영 설정”
 

입니다.


47. 정리

JVM 옵션은 단순 실행 옵션이 아닙니다.

실제로는:

  • Heap 크기
  • GC 전략
  • 서버 응답속도
  • OOM 대응
  • 운영 안정성

전체를 결정하는 매우 중요한 JVM 운영 설정입니다.

특히 실무에서는:

  • -Xms / -Xmx
  • G1GC / ZGC
  • GC 로그
  • Heap Dump
  • Container 메모리

를 정확히 이해하는 것이 매우 중요합니다.

다음 글에서는:

List / Set / Map 차이

를 내부 구조(HashTable, Tree, HashMap), 시간복잡도, 실무 사용 기준까지 포함해서 깊게 정리해보겠습니다.

반응형

댓글