nugawiki

./categories/server

JVM 메모리 튜닝 Heap·PermGen

업데이트 2026-07-21 조회수

PermGen OOM

java.lang.OutOfMemoryError: PermGen space — Class/Method 메타 공간 부족(Spring·MyBatis 등 동적 클래스 다수 로드 시).

  • Java 8+: PermGen 폐지 → Metaspace (-XX:MetaspaceSize, -XX:MaxMetaspaceSize)

옵션 예 (Java 7 이하)

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server \
  -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m \
  -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

주요 옵션

  • -Xms / -Xmx: 힙 초기·최대 — 운영은 동일값 권장(확장 시 GC·할당 정지 완화)
  • -XX:PermSize / -XX:MaxPermSize: PermGen (MaxPermSize는 -Xmx와 별도 할당)
  • -XX:NewSize: Young(Eden+Survivor) 초기 크기

가이드

  • Heap 요구 없으면 ~1G, New:Old ≈ 1:2
  • PermSize 보통 128m, 256m 초과 시 배포·패키징 점검
  • Xms=Xmx: committed 도달 시 순간 정지 방지

대용량 예

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server \
  -Xms3072m -Xmx3072m -XX:NewSize=384m -XX:MaxNewSize=384m \
  -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"

JVM 구조(참고)

Class Loader → Runtime Data Areas(Heap·Stack·PermGen/Metaspace) → Execution Engine(Interpreter·JIT)

./comments