[ Baeldung ] Guide to the Most Important JVM Parameters
[Naver Blog ] JVM Options
VM arguments
유의점. -jar argument 앞에 옵션들 위치해야함..!
JVM은 두 종류의 플래그를 허용함(boolean 플래그, 파라미터가 필요한 플래그)
- 불린 플래그 : XX:+FlagName(설정 사용o), XX:-FlagName(설정 사용x)
- -X 옵션 : JVM에서 사용할 수 있는 메모리양 수정 등…
- -D 옵션 : 자바 클래스에서 사용할 수 있는 시스템 속성 정의
- e.g. -DKey = Value 쌍 형태
- System.getProperty(key) 사용해 호출
Explicit Heap Memory
The most important factor affecting garbage collection performance is total available memory. Because collections occur when generations fill up, throughput is inversely proportional to the amount of memory available.
-Xms<heap size>[unit] # minimal heap size -Xmx<heap size>[unit] # maximal heap size # unit g : Gb, m : Mb, k: Kb # eg) -Xms2G -Xmx5G
비율로 메모리 사이즈 정하기
- XX:InitialRAMPercentage (-Xms 옵션이 설정되어 있으면 이 옵션은 무시)
java -XX:InitialRAMPercentage=50.0 -jar application.jar
이 옵션은 초기 Heap메모리 사이즈를 물리 메모리에 대한 비율로 설정하는 옵션이다. 위와 같이 설정하면, 서버 메모리의 50%가 초기 Heap메모리로 할당되게 된다.
- XX:MinRAMPercentage (-Xmx 옵션이 설정되어 있으면 이 옵션은 무시)
java -XX:MinRAMPercentage=50.0 -jar application.jar
이 옵션은 이름에서 유추되는 것과 달리 최대 메모리 사이즈를 지정하는 옵션이다. 다만, 서버가 256MB미만의 메모리를 갖고 있을 때만 이 옵션은 동작한다.
- XX:MaxRAMPercentage (-Xmx 옵션이 설정되어 있으면 이 옵션은 무시)
java -XX:MaxRAMPercentage=50.0 -jar application.jar
이 옵션도 위와 마찬가지로 최대 Heap메모리 사이즈를 지정하는 옵션이다. 서버가 256MB이상의 메모리를 갖고 있는 경우 이 옵션은 동작한다.
Garbage Collection
적합한 Garbage Collection의 알고리즘을 고르는 것이 중요함.
JVM has four types of GC implementations:
- Serial Garbage Collector
- Parallel Garbage Collector
- CMS Garbage Collector
- G1 Garbage Collector
-XX:+UseSerialGC -XX:+UseParallelGC -XX:+USeParNewGC -XX:+UseG1GC
GC Logging
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=< number of log files > -XX:GCLogFileSize=< file size >[ unit ] -Xloggc:/path/to/gc.log
UseGCLogFileRotation
specifies the log file rolling policy
- NumberOfGCLogFiles : 로그 파일의 최대 갯수
- GCLogFileSize : log file의 최대 크기
- loggc : 로그 파일의 경로
# -Xloggc:/path/to/gc.log # -XX:+PrintGCDetails [0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/usr/src/gc.log instead. [0.001s][warning][gc] -XX:+PrintGCDetails is deprecated. Will use -Xlog:gc* instead. # 결론. 아래와 같이 사용 혹은 gc*로 사용 -Xlog:gc:/usr/src/gc.log
Handling out of Memory
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof -XX:OnOutOfMemoryError="< cmd args >;< cmd args >" -XX:+UseGCOverheadLimit
HeapDumpPath
: dump 파일의 경로. 파일 경로가 아니라, 해당 파일이 생길 디렉토리의 경로를 입력해주어야 함.
OnOutOfMemoryError
: OOM 에러 발생 시, 긴급하게 실행되어야 할 command를 정의