일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JavaScript
- redis
- 알고리즘
- OS
- C
- spring webflux
- 백준
- mongoDB
- Data Structure
- 운영체제
- JPA
- 파이썬
- Spring
- 자료구조
- Galera Cluster
- design pattern
- react
- 자바
- IT
- Java
- MySQL
- 네트워크
- Heap
- 디자인 패턴
- Kafka
- Proxy
- 컴퓨터구조
- Algorithm
- c언어
- MSA
Archives
- Today
- Total
시냅스
JVM 의 Xmx 와 Xms 를 지정해야 하는 이유에 대해 본문
JVM -Xmx, -Xms option
java -Xms2048m -Xmx2048m -jar app.jar
Xmx 와 Xms 는 사용할 최대, 최초 힙 크기를 지정하는 데 사용됩니다.
- Xmx
- Java 프로세스에서 사용 가능한 최대 힙 크기 설정
- 설정하지 않으면 기본적으로 시스템 물리적 메모리 크기에 따라 결정
- Xms
- Java 프로세스에서 사용 가능한 최초 힙 크기를 설정
- 설정하지 않으면 Xmx 와 동일하게 설정
Xmx 와 Xms 는 왜 지정해야 할까?
JVM은 메모리가 부족하게 되면 OS에 메모리를 추가 요청하는 방식으로 힙 사이즈를 조정합니다.
이때 GC 가 발생하게 되고, JVM은 필요한 만큼 힙사이즈를 늘려가게 됩니다.
이렇게 조정하다가 만약 머신의 물리 메모리 사이즈를 넘어가게 되면
가상 메모리를 사용하면서 swap space로 swap in - out 을 하게 됩니다.
https://liltdevs.tistory.com/93
이때 swap 영역은 Disk가 되므로 오버헤드가 발생합니다.
swap 영역인 Disk에 읽기 쓰기를 하고,
동시에 GC도 발생한다면 꽤 큰 성능이슈가 있을 것으로 예상됩니다.
또한, Xmx 와 Xms가 동일하지 않을 때에도 문제는 발생할 수 있습니다.
Xms 가 너무 작은 경우 빈번한 GC를 수행하고,
이 때 메모리를 추가 요청하면서 결국 Xmx와 동일한 사이즈를 갖게 됩니다.
그러므로, 한 머신에서 여러 대의 서버를 실행 중이며
애플리케이션에서 큰 사이즈의 메모리를 사용할 것으로 예상된다면
합리적인 Xmx, Xms 설정을 할 수 있어야겠습니다.
log 를 위한 vm option 들
- verbose:gc
- JVM에서 GC 이벤트가 발생할 때마다 간단한 로그 메시지를 출력
- Xlog:gc
- 상세한 GC 로그를 출력
- 출력 형식은 다양한 방법으로 구성
- -Xlog:gc* 를 사용하면 GC 로그의 상세한 정보를 출력
- Xlog:gc+heap=debug
- GC와 관련된 메모리 사용 정보를 출력
- 이 옵션을 사용하면 GC 로그와 함께 Heap 정보도 출력
- XX:+PrintGCDetails
- GC 이벤트에 대한 자세한 정보를 출력
- 이 옵션을 사용하면 GC 로그가 상세하게 출력
- XX:+PrintGCDateStamps
- GC 이벤트가 발생한 시간을 출력
- XX:+PrintHeapAtGC
- GC 이벤트 발생 시점에서 Heap 사용 정보를 출력
- XX:+PrintTenuringDistribution
- 적극적인 GC 및 비적극적인 GC의 세부 정보를 출력
'Java, Spring' 카테고리의 다른 글
JNI, Java의 Native Code 사용 설명 및 예제 (0) | 2023.03.05 |
---|---|
Spring 과 Ulimit, Socket 자원 관리에 대해 (0) | 2023.03.05 |
Spring 예제로 보는 중복 Request 방지, GUID (≒ UUID) (0) | 2023.03.02 |
Java 코드로 보는 Connection 관련 timeout 에러 정리 (0) | 2023.03.01 |
Java 코드와 예제로 보는 Thread Dump 활용 방법 (0) | 2023.03.01 |
Comments