./categories/server
JVM 메모리 튜닝 Heap·PermGen
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