Tomcat - 힙(heap) 메모리 설정

이름·2021년 6월 18일
0

(pom.xml)

사용 예시
<JAVA_OPTS>-Xms256m -Xmx768m -XX:MaxPermSize=256m</JAVA_OPTS>

-Xms
이 설정은 Java 힙의 초기 크기를 제어합니다. 이 매개변수를 적절하게 조정하면 가비지 콜렉션의 오버헤드를 줄여서 서버 응답 시간 및 처리량을 개선합니다. 일부 응용프로그램의 경우, 이 옵션에 대한 기본 설정이 너무 낮아서 사소한 가비지 콜렉션의 수가 높아질 수 있습니다.

  • Xms 옵션은 jar 파일 실행 초기에 할당하는 동적 메모리이다. 초기에 로드하는 값이 많은 경우에 최소 메모리를 크게 잡아주면 될 것 같다.

-Xmx
이 설정은 Java 힙의 최대 크기를 제어합니다. 이 매개변수를 늘리면 Application Server에 사용 가능한 메모리가 늘어나고 가비지 콜렉션 빈도가 줄어듭니다. 이 설정을 늘리면 서버 응답 시간 및 처리량이 개선될 수 있습니다. 그러나 이 설정을 늘리면 가비지 콜렉션이 발생할 때 해당 콜렉션의 지속 기간이 늘어납니다. 이 설정은 Application Server 인스턴스에 대해 사용 가능한 시스템 메모리 이상으로 증가해서는 안됩니다. 설정을 사용 가능한 시스템 메모리 이상으로 늘리면 시스템 페이징 및 상당한 성능 감소를 유발할 수 있습니다.

  • Xmx 옵션은 jar 파일이 가질 수 있는 최대 동적 메모리이다. 처리하는 쓰레드가 많거나, 메모리에 들고있어야하는 데이터가 많은 경우에 크게 잡아주면 될 것 같다.

-XX:PermSize
이 설정은 Permanent Generation의 최초 크기를 지정한다. Permanent Generation의 최대 크기는 MaxPermSize옵션에 의해 지정된다.
많은 수의 Class를 로딩하는 Application은 크기의 Permanent Generation을 필요로 하며,
Permanent Generation의 크기가 작아서 Class를 로딩하지 못하면 Out of Memory Error가 발생한다.

-XX:MaxPermSize
이 설정은 Permanent Generation의 최대 크기를 지정한다. Permanent Generation의 시작 크기는 PermSize옵션에 의해 지정된다.
많은 수의 Class를 로딩하는 Application은 PermSize와 MaxPermSize옵션을 이용해 Permanent Generation의 크기를 크게 해주는 것이 좋다.
Permanent Generation의 크기가 작을 경우에는 Out of Memory Error가 발생한다.

Xms, Xmx를 동일하게 세팅하는 이유

  • Xms로 init 메모리를 잡고, committed 도달할 때까지 Used용량이 점차 증가하는데,
    committed에 도달시 메모리 추가할당시 시스템 부하발생 (WAS가 몇 ms가량 멈출 가능성 있음)

  • 실제로 원하는 경우 실제 메모리 양보다 더 많이 늘릴 수 있습니다.
    이를 수행하는 것이 좋은지 여부는 시스템에서 실행중인 다른 양에 따라 다릅니다.
    특히, 현재 실행중인 응용 프로그램 및 서비스의 “작업 집합”이 사용 가능한 실제 메모리를 크게 초과하면 시스템이 “쓰레기”되어 가상 메모리 페이지를 디스크간에 이동하는 데 많은 시간이 소요됩니다. 결과적으로 시스템이 엄청나게 느려집니다.

0개의 댓글