Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- CSTS 폭포수 모델
- 최대공약수 예제
- oracle group by
- 테스트 자동화
- bfs 미로탐색 java
- 재귀함수 예제
- 주식 양도세 신고방법
- 톰캣 실시간 로그
- 국세청 해외주식 양도세 신고방식
- katalon
- 피보나치 예제
- 피보나치함수
- 해외주식 양도세 신고
- 한국투자증권 해외주식 양도세
- 홈택스 해외주식 양도세
- 재귀 예제
- recursion example
- 해외증권 양도세 한국투자증권
- katalon xpath
- js 자동완성
- katalon 비교
- katalon 자동화
- git 연동
- katalon 사용법
- javascript 자동완성
- java.sql.SQLSyntaxErrorException
- Katalon Recorder 사용법
- 한국투자증권 양도세 신고
- 피보나치함수 예제
- tomcat log
Archives
- Today
- Total
엄지월드
[6차시] 메모리 관리 및 GC 최적화 : 메모리 문제 예방과 안정적인 시스템 운영 본문
JVM 메모리 구조
- JVM 메모리 구조
- JVM 메모리의 주요 영역
- Heap
- Stack
- Meta space
- Code Cache
- JVM 메모리의 주요 영역
- Heap 메모리
- Young Generation
- Eden, Survivor 영역으로 나뉨
- Old Generation
- 오래 살아남은 객체들이 저장됨
- Minor GC vs Major GC
- Young Generation
- Stack 메모리
- 메서드 호출 시 지역 변수 저장
- 메서드 호출 및 반환 시 스택 프레임 추가 및 제거
- Stack 메모리의 한계 (고정 크기)
- Metaspace
- 클래스 메타데이터 저장
- PermGen과 Metaspace의 차이점
- 네이티브 메모리 사용
- Code Cache
- JIT 컴파일러가 변환한 기계어 저장
- 자주 사용되는 코드 실행 속도 향상
- Code Cache 크기 조정 방법(-XX:ReservedCodeCacheSize)
GC 알고리즘과 동작 원리
- GC개요
- Minor GC
- Young Generation에서 발생, 가벼운 작업
- Major GC
- Old Generation에서 발생, 전체 어플리케이션 멈춤
- Stop-the-world 이벤트
- GC 중 어플리케이션이 일시적으로 멈춤
- Minor GC
- Serial GC
- 단일 스레드로 동작
- 적합한 환경 : 소규모 어플리케이션, 단일 코어 CPU
- 단점 : 멀티코어 환경에서 성능 저하, GC 실행 시 어플리케이션 전체 중단
- Parallel GC
- 멀티스레드로 GC 작업 처리
- 적합한 환경 : 다중 코어 시스템, 서버 애플리케이션
- 장점 : GC 실행 시간이 짧아짐
- 단점 : 여전히 Stop-the-world 이벤트 발생
- CMS GC
- GC 작업이 어플리케이션과 동시에 진행
- 적합한 환경 : 사용자 대기 시간이 중요한 어플리케이션
- 장점 : 낮은 대기 시간
- 단점 : CPU 사용량 증가, 메모리 단편화 가능성
- G1(Garbage-First) GC
- 힙 메모리를 여러 영으로 나누어 처리
- 적합한 환경 : 대규모 메모리 사용, 대규모 시스템
- 장점 : 예측 가능한 지연 시간 제공
- 단점 : 약간의 추가 메모리 사용
- Z GC
- 초저지연 GC
- 적합한 환경 : 대규모 메모리 사용, 초고성능 요구 어플리케이션
- 장점 : 거의 없는 Stop-the-world 시간(10ms미만)
- JVM 버전 제약(JDK 11 이상에서 사용 가능), 더 높은 메모리 사용
- GC 알고리즘 선택 가이드
- 소규모 어플리케이션 : Serial GC
- 서버 어플리케이션 : Parallel GC
- 대기 시간이 중요한 경우 : CMS GC
- 대규모 메모리 환경 : G1 GC
- 초저지연, 대용량 메모리 환경 : ZGC
- GC 로그 활성화 옵션
- -XX:+PrintGCDetails : GC 이벤트와 메모리 사용량을 자세히 기록
- -XX:+PrintGCDateStamps : GC 발생 시각을 타임스탬프 형식으로 기록
- -Xloggc:<file-path> : 로그 파일 경로 지정
- GC 로그 기본 구조
- GC 이벤트 종류 : Minor GC, Major GC
- 메모리 상태 : GC 전후 메모리 사용량, GC에 소요된 시간
- 타임스탬프 : GC가 발생한 시각
- GC 로그 분석의 주요 지표
- GC 발생 빈도 : Minor GC와 Major GC가 얼마나 자주 발생하는지
- GC 소요 시간 : 각 GC 이벤트에 소요된 시간
- Stop-the-world 시간 : 어플리케이션이 멈춘 시간
- 메모리 해제 비율 : GC 후 메모리가 얼마나 회수되었는지
- GC 로그 분석 예시
- Full GC / 메모리 누수로 인한 Major GC 증가
- 0.98은 애플리케이션에 영향을 줄 수 있는 지표다.
- GC 로그 분석 예시
- Minor GC 빈도 증가
- Heap 메모리가 부족할 경우 증가 가능
- 0.04에서 0.05로 늘어난 것 확인 가능
- GC 로그를 활용한 성능 최적화
- 힙 메모리 크기 조정
- Xms : 초기 힙 메모리 크기 설정
- Xmx : 최대 힙 메모리 크기 설정
- 적절한 크기 설정으로 GC 빈도 감소
- GC 알고리즘 선택
- CMS GC : 대기 시간이 중요한 환경에 적합
- G1 GC : 예측 가능한 성능을 제공, 대규모 메모리 환경에 적합
- ZGC : 초저지연 환경, 대용량 메모리 어플리케이션에 적합
- Stop-the-world 시간 줄이기
- 적절한 GC 알고리즘 선택 : G1 GC, ZCC 등
- 힙 크기 최적화 : 충분한 메모리 제공으로 GC빈도 및 시간 감소
- 실시간 로그 분석 : GC 이벤트에 따른 성능 변화 모니터링
메모리 모니터링
- 실시간 모니터링의 필요성
- 메모리 누수 및 GC 이벤트 과다 발생 조기 감지
- 어플리케이션 성능 문제에 대한 즉각 대응
- 메모리 사용량, GC빈도, CPU 사용률 실시간 확인
- Spring Boot Actuator
- /actuator/heath : 어플리케이션 상태 확인
- /actuator/metric : 메모리 사용량, GC 활동, CPU 사용량 등 실시간 메트릭 제공
- /actuator/threaddump : 스레드 덤프 제공
- Spring Boot Admin UI를 통해 시각적으로 확인 가능
- Spring Boot Actuator
- /actuator/metrics/jvm.memory.used : 힙 메모리 사용량
- /actuator/metrics/jvm.gc.pause : GC로 인한 일시 정지 시간 모니터링
- /actuator/metrics/jvm.memory.max : JVM 메모리 최대 크기
- Promethus & Grafana
- Prometheus : 실시간 메트릭 수집, 메모리 사용량, GC 상태 추적
- Grafana : 실시간 대시보드 시각화, 커스텀 알람 설정
- 통합 모니터링 : 여러 서버 및 마이크로서비스의 상태 통합 관리
'기타' 카테고리의 다른 글
[8차시] 최신 최적화 사례와 트렌드 탐구 : 성능 향상을 위한 지속적 개선 (4) | 2025.03.23 |
---|---|
[7차시] 실제 성능 및 부하 테스트 실습 : 애플리케이션의 한계를 찾아서 (0) | 2025.03.23 |
[5차시] 데이터베이스 및 SQL 튜닝 : 데이터 처리 성능 극대화 (2) | 2025.03.18 |
[4차시] 캐싱 전략과 최적화 기법 : 속도와 자원을 동시에 잡는 방법 (0) | 2025.03.18 |
[3차시] 스프링 부트 내장 톰캣 최적화 및 NGINX 연계 : 효율적 요청 처리 환경 만들기 (0) | 2025.03.17 |
Comments