일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Spring
- 코드트리
- 스프링부트
- 코코테라스
- JMeter
- 알고리즘
- DDD
- spring boot
- aws
- 글또
- 코딩
- 판교퇴근길밋업
- 성능테스트
- 이력또
- 클린 아키텍처 이해하기
- ddd vs layered
- 초년생
- 투자를 공부하는 이유
- 회고
- 매매 만족감
- Java
- 퇴사 회고
- 이력서 리뷰어 후기
- 알고리즘분류
- 면접관 입장에서
- 자동화
- 알고리즘초보
- 알고리즘 추천
- 알고리즘사이트
- 프로그래밍
Archives
- Today
- Total
영감을 (inspire) 주고픈 개발 블로그
서버 개발자가 알아야 하는 JVM 개념과 설정들 본문
1. 메모리 관리 설정
- 힙 메모리 설정 (-Xms, -Xmx):
- -Xms는 초기 힙 크기를, -Xmx는 최대 힙 크기를 지정합니다.
- 애플리케이션의 메모리 요구량과 GC 빈도에 따라 적절하게 조정하여 OutOfMemoryError를 예방합니다.
- Young Generation 관련 옵션:
- -Xmn: Young Generation(신세대) 영역의 크기를 명시적으로 설정합니다.
- -XX:NewRatio: Old Generation과 Young Generation의 비율을 조정해 힙 구조를 최적화합니다.
- -XX:SurvivorRatio: Eden과 Survivor 영역의 비율을 설정하여 Minor GC 효율을 높입니다.
- 컨테이너 환경 지원:
- -XX:+UseContainerSupport (Java 8u191 이상) 또는 최신 JDK에서는 -XX:MaxRAMPercentage/-XX:MinRAMPercentage 옵션을 활용하여, 컨테이너의 메모리 제한을 인식하고 이에 맞게 힙 크기를 자동 조정할 수 있습니다.
- -XX:+UseContainerSupport (Java 8u191 이상) 또는 최신 JDK에서는 -XX:MaxRAMPercentage/-XX:MinRAMPercentage 옵션을 활용하여, 컨테이너의 메모리 제한을 인식하고 이에 맞게 힙 크기를 자동 조정할 수 있습니다.
2. 가비지 컬렉션(GC) 설정
- GC 알고리즘 선택:
- -XX:+UseG1GC: 서버 환경에서 많이 사용되는 G1 GC는 낮은 일시 중지 시간과 높은 처리량을 목표로 합니다.
- -XX:+UseZGC 또는 -XX:+UseShenandoahGC: 대용량 힙과 극한의 낮은 지연 시간이 필요한 경우 선택합니다.
- GC 튜닝 옵션:
- -XX:MaxGCPauseMillis: GC 일시 중지 시간을 목표로 설정하여 응답성을 제어합니다.
- -XX:+DisableExplicitGC: 명시적인 System.gc() 호출을 무시해 불필요한 GC를 방지합니다.
- -XX:+HeapDumpOnOutOfMemoryError: OOM 발생 시 힙 덤프를 생성해 문제 진단에 활용할 수 있습니다.
- -Xlog:gc: GC 로그를 활성화하여 GC 활동을 모니터링하고 튜닝에 참고합니다.
- -XX:ParallelGCThreads와 -XX:ConcGCThreads: 병렬 및 동시 GC 스레드 수를 조정해 GC 성능을 최적화합니다.
3. JIT 컴파일러 및 최적화 설정
- Tiered Compilation 활성화:
- -XX:+TieredCompilation 옵션은 인터프리터와 JIT 컴파일러의 장점을 결합하여, 자주 실행되는 코드를 네이티브 코드로 컴파일해 성능을 개선합니다.
- 컴파일 임계치 설정:
- -XX:CompileThreshold: 특정 메서드가 JIT 컴파일되기 전에 호출되어야 하는 횟수를 지정합니다.
4. 네트워크 및 DNS 관련 설정
- DNS 캐싱 TTL:
- networkaddress.cache.ttl 시스템 속성을 설정하면 JVM이 DNS 조회 결과를 일정 시간(예: 5초) 동안 캐싱하도록 할 수 있습니다.
- 이는 AWS와 같이 IP 주소가 자주 변경되는 환경에서 최신 IP 정보를 반영하는 데 유용합니다.
5. 스레드 관련 설정
- 스레드 스택 크기:
- -XX:ThreadStackSize: 각 스레드에 할당되는 스택 크기를 조정해 메모리 사용량을 최적화할 수 있습니다.
- 예를 들어, -XX:ThreadStackSize=512k 로 설정하여 과도한 스택 메모리 사용을 방지할 수 있습니다.
6. 디버깅 및 모니터링 옵션
- 디버깅/에러 로그:
- -XX:ErrorFile: 치명적인 오류 발생 시 에러 로그 파일의 위치를 지정합니다.
- GC 로그 및 힙 덤프 옵션:
- -Xlog:gc: GC 활동 로그를 자세하게 출력해 GC 튜닝과 문제 진단에 도움을 줍니다.
- -XX:+HeapDumpOnOutOfMemoryError: OOM 발생 시 힙 덤프를 생성하여 원인 분석에 활용합니다.
7. 기타 고려 사항
- 명시적 GC 호출 제어:
- -XX:+DisableExplicitGC: 애플리케이션 내에서 System.gc() 호출이 성능 저하를 유발할 수 있으므로 이를 비활성화합니다.
- 문자열 중복 제거:
- -XX:+UseStringDeduplication: G1 GC 사용 시, 동일한 문자열 인스턴스의 중복을 제거해 메모리 사용 효율을 높입니다.
- JVM 시작 옵션을 환경별로 구분:
- 운영 환경, 테스트 환경, 컨테이너 환경 등 각 상황에 맞춰 위 옵션들을 조합하여 최적의 JVM 환경을 구성하는 것이 중요합니다.
반응형
'개발 > 디테일' 카테고리의 다른 글
백엔드 서버 개발자가 알아야할 MySQL 설정/지식 (2) | 2025.02.07 |
---|---|
java 9 ~ 16 + 17 특징 정리 (0) | 2022.11.28 |
MySQL varchar 한글 입력사이즈는? (0) | 2021.10.13 |
python: yield 를 통한 데이터 전달 (0) | 2021.10.13 |
네트워크: ConnectionTimeout, Read Timeout (0) | 2021.10.12 |