소개
JVM 파라미터는 Java 바이트코드를 실행하는 Java Virtual Machine (JVM) 을 구성하는 데 사용됩니다. JVM 파라미터를 적절하게 구성함으로써 Java 애플리케이션의 성능을 향상시킬 수 있습니다. 이 Lab 에서는 Java 애플리케이션의 성능을 최적화하기 위해 일반적으로 사용되는 몇 가지 JVM 파라미터를 설정하는 방법을 배우겠습니다.
힙 메모리 설정
힙 메모리는 Java 객체가 할당되는 런타임 데이터 영역입니다. -Xmx 및 -Xms 파라미터를 사용하여 힙 메모리 크기를 설정할 수 있습니다.
-Xmx<heap size>[unit]: 최대 힙 크기를 설정합니다.-Xms<heap size>[unit]: 초기 힙 크기를 설정합니다.
예를 들어, 최소 힙 크기를 512MB 로, 최대 힙 크기를 1GB 로 설정하려면 다음 명령을 사용할 수 있습니다.
java -Xms512m -Xmx1g MyApp
가비지 컬렉터 선택
가비지 컬렉션 (Garbage collection) 은 Java 애플리케이션에서 더 이상 사용되지 않는 객체가 차지하는 메모리를 해제하는 프로세스입니다. 가비지 컬렉터의 선택은 애플리케이션의 성능에 상당한 영향을 미칠 수 있습니다. JVM 은 여러 가비지 컬렉터를 제공하며, 각 컬렉터는 고유한 강점과 약점을 가지고 있습니다.
-XX:+UseSerialGC: 단일 스레드를 사용하여 가비지 컬렉션을 수행하는 Serial 가비지 컬렉터를 활성화합니다.-XX:+UseParallelGC: 가비지 컬렉션을 위해 여러 스레드를 사용하는 Parallel 가비지 컬렉터를 활성화합니다.-XX:+UseParNewGC: 여러 스레드를 사용하여 동시 가비지 컬렉션을 수행하는 Concurrent-mark-sweep (CMS) 가비지 컬렉터를 활성화합니다.-XX:+UseG1GC: 일관된 일시 중지 시간과 높은 처리량을 제공하도록 설계된 Garbage-first (G1) 가비지 컬렉터를 활성화합니다.
예를 들어, Parallel 가비지 컬렉터를 활성화하려면 다음 명령을 사용할 수 있습니다.
java -XX:+UseParallelGC MyApp
가비지 컬렉션 활동 로깅
가비지 컬렉션 로깅을 통해 가비지 컬렉터의 성능을 모니터링하고 애플리케이션의 요구 사항에 따라 가비지 컬렉터 매개변수를 조정할 수 있습니다. 다음 매개변수를 사용하여 가비지 컬렉션 로깅을 활성화할 수 있습니다.
-XX:+UseGCLogFileRotation: 가비지 컬렉션 로그에 대한 로그 회전을 활성화합니다.-XX:NumberOfGCLogFiles=<number of log files>: 가비지 컬렉션 로그 파일 수를 제한합니다.-XX:GCLogFileSize=<file size><unit>: 가비지 컬렉션 로그의 크기 제한을 지정합니다.-Xloggc:[path to gc.log file]: 가비지 컬렉션 로그의 경로를 지정합니다.
예를 들어, 가비지 컬렉션 로깅을 활성화하고 로그 파일 경로를 /path/to/gc.log로 설정하려면 다음 명령을 사용할 수 있습니다.
java -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:/path/to/gc.log MyApp
Out of Memory 오류 처리
JVM 이 메모리 부족 상태가 되면 Out Of Memory 에러를 발생시킵니다. 이 에러를 처리하기 위해 다음 JVM 매개변수를 사용할 수 있습니다.
-XX:+HeapDumpOnOutOfMemoryError: Out Of Memory 에러가 발생하면 JVM 은 힙 덤프 (heap dump) 를 디스크에 기록합니다.-XX:HeapDumpPath=<path to heap dump file>: 힙 덤프 파일의 경로를 지정합니다.-XX:OnOutOfMemoryError=<command>: Out Of Memory 에러가 발생하면 JVM 은 지정된 명령을 실행합니다.-XX:+UseGCOverheadLimit: JVM 은 이 옵션을 사용하여 가비지 컬렉션에 소요되는 시간의 제한을 설정합니다.
예를 들어, Out Of Memory 에러가 발생할 때 JVM 이 힙 덤프를 파일 /path/to/heapdump.hprof에 기록하도록 구성하려면 다음 명령을 사용할 수 있습니다.
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof MyApp
64 비트 JVM 사용
-d 매개변수를 사용하여 32 비트 또는 64 비트 JVM 을 선택할 수 있습니다. 예를 들어, 64 비트 JVM 을 사용하려면 다음 명령을 사용할 수 있습니다.
java -d64 MyApp
JVM 파라미터로 Java 애플리케이션 컴파일 및 실행
이전 단계에서 배운 JVM 매개변수를 사용하여 HelloWorld.java 프로그램을 컴파일하고 Java 애플리케이션을 실행해 보겠습니다.
cd ~/project
touch HelloWorld.java
touch HelloWorld.java
다음 코드를 입력합니다.
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
파일을 저장하고 종료합니다. 이제 -Xmx 매개변수를 사용하여 코드를 컴파일하고 실행해 보겠습니다.
javac HelloWorld.java
java -Xmx512m HelloWorld
이렇게 하면 최대 힙 크기가 512MB 로 설정됩니다. 다음 출력을 볼 수 있습니다.
Hello, World!
가비지 컬렉터를 사용하여 Java 애플리케이션 컴파일 및 실행
이제 병렬 가비지 컬렉터 (parallel garbage collector) 를 사용하여 Java 애플리케이션을 컴파일하고 실행해 보겠습니다.
java -XX:+UseParallelGC HelloWorld
다음 출력을 볼 수 있습니다.
Hello, World!
가비지 컬렉션 로깅을 사용하여 Java 애플리케이션 컴파일 및 실행
이제 가비지 컬렉션 로깅을 활성화하여 Java 애플리케이션을 컴파일하고 실행해 보겠습니다.
java -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:/path/to/gc.log HelloWorld
이렇게 하면 로그 파일 경로가 /path/to/gc.log로 설정됩니다.
자주 사용되는 다른 매개변수를 사용하여 Java 애플리케이션 컴파일 및 실행
이제 -XX:+UseStringDeduplication 및 -XX:MaxHeapFreeRatio 매개변수를 사용하여 Java 애플리케이션을 컴파일하고 실행해 보겠습니다.
java -XX:+UseStringDeduplication -XX:MaxHeapFreeRatio=70 HelloWorld
이렇게 하면 문자열 중복 제거가 활성화되고 가비지 컬렉션 후 사용 가능한 최대 힙 공간 비율이 70% 로 설정됩니다.
요약
이 랩에서는 Java 애플리케이션의 성능을 최적화하기 위해 다양한 JVM 매개변수를 설정하는 방법을 배웠습니다. 힙 메모리 크기를 설정하고, 가비지 컬렉터 (garbage collector) 를 선택하고, 가비지 컬렉션 로깅 (garbage collection logging) 을 활성화하고, Out Of Memory 오류를 처리하고, 64 비트 JVM 을 사용하고, 기타 자주 사용되는 매개변수를 설정하는 방법을 배웠습니다. 또한 JVM 매개변수를 사용하여 Java 애플리케이션을 컴파일하고 실행하는 방법도 배웠습니다.



