[AIX Solaris HP-UX Linux Windows]

Sun HotSpot JVM 조정 매개변수(Solaris 및 HP-UX)

Sun HotSpot JVM(Java™ Virtual Machine)은 JVM 구성을 개발하고 데이터(기본적으로 verbosegc 데이터)를 수집하고 분석하는 반복 프로세스입니다. 모든 구성 변경내용은 다음 주기에 적용됩니다.

많은 Sun HotSpot JVM 매개변수가 있지만 다음 매개변수는 조정에 중요한 매개변수로 식별됩니다. 이러한 매개변수 중에서 수정할 항목은 구성 선택사항에 따라 달라집니다. 따라서 이러한 매개변수 설명을 검토하는 작업 외에도 JVM 조정 방법을 완전히 이해하려면 Sun HotSpot JVM(Java Virtual Machines)(Solaris 및 HP-UX) 조정에 대해 검토할 수 있습니다.

모든 Sun HotSpot 옵션이 지정되는 표준 양식이 있습니다. 이 양식을 이해하면 기록 옵션에 관한 문제점을 방지하고 지침을 해석하고 JVM에서 옵션을 거부하고 시작을 거부하는 잠재적인 혼란을 방지하는 데 도움이 될 수 있습니다.

-X option 또는 - option과 같이 표준 또는 이식 가능한 VM 옵션이 아닌 -XX 옵션으로 시작할 때 Sun HotSpot JVM의 구현에 관한 Sun HotSpot 옵션에 특별히 관심을 두어야 합니다. 이러한 옵션 대부분은 부울 값입니다. 즉, true 또는 false로 설정됩니다. 이 설정은 기능을 사용하거나 사용하지 않도록 설정합니다. 다음 표준 양식은 옵션을 사용 가능하게 하는 데 사용되며, 이는 조정 프로세스 중에 옵션 설정을 변경할 때 일반적으로 수행하는 작업입니다.
-XX:+ option
다음 표준 양식은 옵션을 사용 불가능하게 하는 데 사용되며, 이는 비교적 덜 사용합니다.
-XX:- option
문제점 방지 문제점 방지:
  • 더하기 부호 또는 빼기 부호를 사용할 경우 바로 앞에 콜론이 나와야 합니다. 그렇지 않으면 일반적으로 옵션에 값이 필요하고 option=value 형식이므로 값을 할당해야 할 수도 있습니다.
  • SUN 웹 사이트에 명시한 대로 -XX 핫스팟 옵션은 JDK의 후속 릴리스에서 공지 없이 변경될 수 있습니다. 따라서 옵션을 지정하기 전에 시스템에서 실행 중인 JDK 버전에서 지원되는지 확인해야 합니다.
gotcha

사용할 옵션을 판별하는 경우 일반적으로 옵션 이름에서 옵션이 사용 가능한 경우 수행되는 조치를 설명합니다. 대부분 옵션의 기본값은 기능을 사용하지 않는 상태로 둡니다. 따라서 이미 기능을 사용하지 않는 옵션을 사용하지 않으면 이중 부정 상황이 발생할 수 있습니다. 특히 Disable이라는 단어로 시작하는 이름의 옵션인 경우 이 상황에 해당됩니다. 예를 들어, DisableExplicitGC 옵션의 기본 설정에서는 JVM이 명시적 가비지 콜렉션 요청을 존중합니다. 따라서 일반적으로 이 옵션 앞에 더하기 부호를 지정하여 이 옵션을 사용 가능하게 합니다. 더하기 부호는 명시적 가비지 콜렉션 요청을 존중하는 조건을 사용하지 않는 효과(옵션 이름이 함축하는 대로)를 적용합니다. DisableExplicitGC 옵션과 같은 옵션을 사용할 때 -XX:-DisableExplicitGC 설정은 기본 조치를 지정하는 것과 동등하기 때문에 이 설정이 나타나는 경우는 매우 드뭅니다.

옵션 이름이 사용 조건을 포함하는 상황에서 일반적으로 옵션은 기능의 사용 또는 사용 불가능의 의미와 더 잘 표현하며 더하기 또는 빼기 부호의 의미가 보다 더 직관적입니다.

값을 지정해야 하는 경우 옵션은 옵션과 설정 사이에 등호를 사용하여 할당의 방식으로 나타납니다. 이 상황에서 옵션은 등호 뒤에 적절한 숫자 값을 예상합니다(등호와 숫자 사이에 공백 없음). 값은 종종 표준 약어(킬로바이트의 경우 k, 메가바이트의 경우 m, 기가바이트의 경우 g)를 허용하며, 약어는 이러한 값을 지정하는 데 적합합니다. 가상 머신은 이러한 매개변수의 제한된 유효성 검증을 수행하며, 유효하지 않은 경우 일반적으로 가상 머신을 시작할 수 없음을 표시하는 오류 메시지를 생성합니다.

-Xmx(최대 Java 힙 크기)

-XX:MaxPermSize 매개변수와 함께 이 매개변수를 조정하여 충분한 Java 힙 메모리를 제공합니다. Java 힙에서 오브젝트 스토리지에 대한 최대 Java 힙 크기 값을 지정하는 경우 시스템에서 처리하도록 지정된 최고 입력 볼륨을 처리하는 데 필요한 최고 자원 수요를 고려해야 합니다.

반대로 Java 힙의 초기 최소 크기(-Xms 매개변수를 사용하여 지정됨)는 정기적인 고정 상태 입력 로드 아래에서 시스템의 정상 조작으로부터 발생한 지속적 데이터를 수용하는 데 필요한 Java 힙 크기 조정을 반영해야 합니다. 이러한 자원 요청에서는 힙 용량을 늘리기 위해 많은 가비지 콜렉션 주기를 필요로 하지 않고도 빠른 초기화를 허용하도록 올바른 스토리지만 청구하는 효율적인 시스템 시작을 보장합니다. 이후에 Java 힙의 작업 크기 용량은 정기적인 고정 상태 워크로드를 수용하기 위해 알려진 정상 용량과 시스템 디자인 최고 크기 사이에서 달라지며, 힙 용량의 모든 변이는 활동의 급격한 변화나 워크로드의 증가와 같은 시스템 입력의 변경을 반영해야 합니다.

Java 힙의 작업 크기 용량은 시스템의 실행 상태에 대한 유용한 정보로 간주됩니다. Java 힙의 초기 최소 크기 조정은 시스템 시작을 최적화하는 것에만 관련되어야 합니다. 최소 및 최대 힙 크기를 동일한 값으로 설정하면 Java 힙이 고정되고 Java 힙을 관리하기 위한 JVM의 복구 옵션을 제한합니다. 이러한 유형의 설정은 성능에 패널티를 부과하고 Java 힙 자원의 활용도를 떨어뜨릴 수 있습니다.

-XX:+AggressiveHeap

내장 조정이 사용 가능한 상태에서 기본 처리량/병렬 청소 콜렉터를 사용하는 경우 이 매개변수를 사용하십시오. JVM은 실행 중인 운영 체제의 모든 자원 사용에 기반하여 해당 조정 알고리즘의 매개변수를 적극적으로 조정할 수 있습니다. 운영 체제의 모든 자원을 사용하여 단일 제품 프로세스가 실행되는 상황에서 이 옵션을 사용하여 JVM이 만족스러운 결과를 전달할 수 있는지 판별합니다. JVM 결과를 테스트하면서 이 옵션을 사용하면 조정 노력을 줄일 수 있습니다.

-XX:CMSInitiatingOccupancyFraction=75

동시 low-pause mark-sweep 콜렉터를 사용하는 경우 이 매개변수를 구성합니다. 이 옵션은 CMS를 제어하는 데 사용됩니다. 이 항목은 힙의 tenured 영역에서 가비지 콜렉션을 수행하기 위해 전용 백그라운드 스레드가 참여하는 경우 트리거 조건을 설정합니다. 다른 가비지 콜렉션 모드와 달리 가비지 콜렉션 조치는 할당 실패를 기다리지 않습니다. 대신 목표는, 그렇지 않으면 실패하는 할당이 발생하기 전에 충분한 공간을 복구하도록 가비지 콜렉션을 트리거하는 것입니다. 이론적으로 트리거는 Java 힙의 활용율에 기반하며 기본값은 약 70%입니다. 일반적으로 기본값을 통해, 이 빈도가 필요한 값보다 더 높을 수 있어도 CMS 주기를 충분히 시작하도록 보장합니다.

그러나 매우 작은 eden 영역과 생존(survivor) 공간을 사용하지 않는 경우 오브젝트가 오래 지속될 가능성은 거의 없으므로 세대간 가비지 콜렉션 지원이 수명이 짧은 오브젝트를 수집할 수 있습니다. 세대간 가비지 콜렉션을 활용하는 시스템의 경우 CMS 기본값은 수명이 짧은 많은 오브젝트를 생성하여 기본적으로 Sun HotSpot 구조가 디자인된 세대간 지원을 이용할 기회를 거부합니다. 적당한 eden 영역 및 젊은 세대의 생존(survivor) 공간에서 가장 온건한 자원 투자 방식에서만, 전체 세대간 가비지 콜렉션 조치를 다시 사용 가능하게 하려는 작업은 1초 또는 1초 미만의 공격적 일시중지를 일으키고 tenured 영역으로의 오래된 오브젝트 승격을 낮게 유지합니다. 이 조건으로 인해 사용자는 오브젝트 수명만큼 유지된 컨텐츠의 사용 가능 압축에 대한 모든 혜택을 누르며, 힙이 더 큰 경우에도 CMS 스레드가 tenured 영역을 수집할 최대 기회를 제공합니다.

-XX:+DisableExplicitGC

이 옵션은 시스템의 소프트웨어 컴포넌트에 도입되었을 수 있는 불필요하거나 오래된 주요 가비지 콜렉션 주기를 제거하기 위해 명시적 가비지 콜렉션을 사용하지 않습니다.

개발자는 프로그래머가 시작한 전체 압축 가비지 콜렉션 주기를 유도하는 System.gc() 호출의 사용을 피하는 것이 좋습니다. 이러한 호출은 전체 애플리케이션 시스템에 대한 가비지 콜렉션 및 자원 조정을 방해할 수 있기 때문입니다. 요구되는 일시정지 시간 요구사항을 만족하고 프로그래머가 시작한 가비지 콜렉션 호출을 수행하지 않으려는 경우 이 옵션은 명시적 System.gc() 호출을 무시하므로 이 옵션을 사용하는 방법을 적극적으로 고려해야 합니다.

-XX:MaxNewSize= and -XX:NewSize=

-XX:+UseAdaptiveSizePolicy 매개변수에서 제공하는 내장 조정을 사용하는 대신, 기본 처리량/병렬 청소(scavenge) 콜렉터를 사용하지만 이 청소 콜렉터를 수동으로 조정하려는 경우 이 매개변수를 사용합니다. 현재 젊은 세대 크기는 -XX:NewSize 매개변수에 지정된 대로, 젊은 세대의 초기 또는 최소 크기 이상으로 바인드됩니다. 이 크기는 -XX:MaxNewSize 매개변수에 지정된 대로, 최대 젊은 세대에 지정된 값 이하입니다.

특정 상황에서는 -XX:NewRatio 매개변수로 판별되는, 세대간 가비지 콜렉션에서 고려하는 힙의 크기를 제안하도록 제안할 수 있습니다. 그러면 일반적으로 젊은 세대의 최대 범위를 제한하고 종종 최소 크기도 제한합니다. 예를 들어 세대간 가비지 콜렉션에 종속될 수 있는 대형 오브젝트 한계를 설정하거나 일반적으로 수명이 긴 지속적 오브젝트 세트를 넘어서서 사용되는 최대 메모리 크기를 제한하려면 젊은 세대 힙의 최대 크기를 설정해야 할 수도 있습니다. 젊은 세대 오브젝트에 사용되는 힙의 섹션에서 최소 크기를 지정하면 일반적으로 생존(survivor) 공간 사용의 조정이 동반됩니다. 이는 보통 2차적인 범주로 중요하지만 -Xms 매개변수에 지정된 대로, Java 힙에서 최소 자원의 제한사항을 만족해야 합니다.

세대간 가비지 콜렉션 내 특정 동작을 얻으려는 경우가 아니면, NewRatio 옵션을 사용하여 각각 최소값 또는 최대값을 지정하지 않아도 됩니다. 최대값 또는 최소값을 설정하는 이유는 보통 서로 다릅니다. -Xmn 매개변수를 사용하여 젊은 세대 섹션의 크기를 설정 및 고정하는 빠른 방법이긴 해도, 이러한 설정은 동일한 값으로 설정되는 경우는 거의 없습니다. 그러나 구성이 부적절하면 세대간 가비지 콜렉션의 혜택을 완전히 잃어버릴 수 있습니다.

-XX:MaxPermSize(영구적 영역)

-Xmx 매개변수와 함께 이 매개변수를 조정하여 충분한 Java 힙 메모리를 제공합니다. 영구적 영역은 인턴 문자열과 같은 모든 클래스 코드와 클래스와 유사한 데이터를 저장하는 데 사용됩니다.

영구적 영역은 동시에 함께 로드할 수 있는 모든 클래스를 수용하기에 충분히 커야 합니다. 이 영역에 적절한 크기를 판별하는 작업은 혼란스러울 수 있습니다. 힙의 이 영역은 더 작고, 더 느리게 확장되며, 특별히 클래스와 유사한 오브젝트에 사용되며, 일반적으로 현재 용량의 99 - 100%에서 활용되는 것으로 관찰되기 때문입니다. 따라서 메모리 부족 이벤트를 해석할 때 주의해야 합니다. 더 많은 자원을 포함하는 이 영역을 제공하기 전에 이 영역이 최대한 확장되었는지 항상 확인해야 합니다.

문제점 방지 문제점 방지: Java Platform, Enterprise Edition(Java EE) 기반 시스템에서는 애플리케이션 클래스 로더의 사용량이 높으므로, -Xnoclassgc 매개변수를 사용하지 않아야 합니다. 이 매개변수는 클래스 데이터의 메모리 누수를 효과적으로 생성하여 힙의 이 중요한 영역에 대한 가비지 콜렉션을 방지하기 때문입니다. 변화하는 클래스 컨텐츠를 자주 배치하는 개발 시스템의 경우 이 영역의 크기를 크게 늘려야 합니다. 또한 현재 사용량 내에서 휴면 코드의 이전 버전이 누적되지 않도록 정기적으로 이 시스템을 다시 시작해야 합니다(그렇지 않으면 클래스 로더를 해제할 수 없음). gotcha

-XX:MaxTenuringThreshold=number-of-collections

동시 low-pause mark-sweep 콜렉터를 사용하는 경우 이 매개변수를 구성합니다. 이 매개변수는 이전 세대 섹션으로 이동하기 전에 오브젝트가 새 세대에 남아 있는 기간 중 콜렉션의 수를 지정하여 새 세대 섹션에서 이전 세대 섹션으로 오브젝트의 승격을 제어합니다. 기본값은 8입니다.

-XX:NewRatio=2

-XX:+UseAdaptiveSizePolicy 매개변수에서 제공하는 내장 조정을 사용하는 대신, 기본 처리량/병렬 청소(scavenge) 콜렉터를 사용하지만 이 청소(scavenge) 콜렉터를 수동으로 조정하려는 경우 이 매개변수를 사용합니다.

Java 힙은 오브젝트가 저장되는 2개 섹션으로 구분됩니다. 섹션 중 하나는 세대간 가비지 콜렉션이 수행되는 위치이며, 여기에 젊은 세대 오브젝트가 상주합니다. 나머지 힙으로 구성된 다른 섹션은 tenured 힙이라고 하며, 오래되거나 수명이 긴 오브젝트가 상주합니다. 이 옵션은 세대간 가비지 콜렉션을 지원하는 젊은 세대 영역의 크기를 전체 힙 용량에 비례하여 조정합니다. 현재 젊은 세대 크기는 -XX:NewSize 매개변수에 지정된 대로, 젊은 세대의 초기 또는 최소 크기 이상으로 바인드됩니다. 이 크기는 -XX:MaxNewSize 매개변수에 지정된 대로, 최대 젊은 세대에 지정된 값 이하입니다. 젊은 세대 크기는 기본 Java 힙의 현재 용량에서 판별한 대로, tenured 영역에 대한 비율로 유지보수됩니다. 기본값 2는 tenured 영역이 젊은 세대 영역 크기의 2배임을 의미합니다. 즉, 젊은 세대는 전체 Java 힙의 1/3에 해당합니다.

일반적으로 이 기본값은 양호한 세대간 가비지 콜렉션 성능을 전달합니다. 이는 Sun HotSpot JVM 조정의 일반적인 목표입니다. 그러나 다른 전략이 존재합니다. 예를 들어 세대간 가비지 콜렉션이 수행되는 힙의 비율을 늘릴 수 있습니다. 비례를 변경하려는 경우 세대간 가비지 콜렉션에서 합리적으로 유지보수할 수 있는 힙의 크기와 관련된 한계가 있음을 명심하십시오. 해당 한계를 초과하면 모든 세대간 가비지 콜렉션이 유실될 수 있습니다. 가비지 콜렉션 주기는 힙의 세대간 파트만 고려하는 원하는 부 가비지 콜렉션이 아니라, 전체 힙에서 주요 가비지 콜렉션 주기가 되기 때문입니다.

2는 VM 모드로 실행되는 서버의 기본값입니다.

-XX:NewSize=128m

동시 low-pause mark-sweep 콜렉터를 사용하는 경우 이 매개변수를 구성합니다. 현재 젊은 세대 크기는 -XX:NewSize 매개변수에 지정된 대로, 젊은 세대의 초기 또는 최소 크기 이상으로 바인드됩니다. CMS를 조정하는 경우 난점 중 하나는 CMS 주기를 중단할 때 나타나는 최악의 가비지 콜렉션 시간에 몇 초 정도 걸릴 수 있다는 점입니다. 이로 인해 특히 장기 일시정지를 방지하는 방법으로 CMS를 사용하는 시스템의 비용이 증가합니다.

결과적으로 서비스 레벨 계약은 CMS의 사용을 명시할 수 있습니다. 이 상황에서 조정을 수행하면 CMS에 모든 성공 기회를 제공하도록 최대한 주의해야 합니다. CMS는 예상 트리거를 통해 요구되기 전에 항상 충분한 여유 자원을 사용할 수 있도록 CMS 주기를 충분히 일찍 시작할 수 있는 경우에만 성공합니다. tenured 세대를 채우기 전에 CMS 콜렉터를 완료할 수 없으면 애플리케이션을 일시정지하여 콜렉션을 완료합니다. 이를 전체 콜렉션이라고 합니다. 전체 콜렉션은 사용자 애플리케이션에 맞게 조작을 조정하기 위해 CMS 콜렉터를 추가로 조정해야 한다는 신호입니다.

-XX:SurvivorRatio=

-XX:+UseAdaptiveSizePolicy 매개변수에서 제공하는 내장 조정을 사용하는 대신, 기본 처리량/병렬 청소(scavenge) 콜렉터를 사용하지만 이 청소(scavenge) 콜렉터를 수동으로 조정하려는 경우 또는 동시 low-pause 콜렉터를 조정하려는 경우 이 매개변수를 사용합니다.

세대간 가비지 콜렉션 조치는 수명이 더 긴 것보다 수명이 짧은 오브젝트를 구분하는 작업과 관련됩니다. 계속 사용 중인 해당 오브젝트만 힙에서 유지해야 합니다. 세대간 가비지 콜렉션을 호스팅하는 젊은 세대 영역은 추가 내부 구조를 포함합니다. 여기에는 처음에 오브젝트가 할당되는 큰 eden 영역과 수명이 더 긴 오브젝트가 상주하는 더 작은 생존(survivor) 공간을 포함합니다. SurvivorRatio는 더 작은 생존(survivor) 공간에 비해 eden 영역이 얼마나 더 큰 지에 따라 이 영역 크기를 조정합니다. 일반적으로 생존(survivor) 공간 크기 조정의 중요도는 2차적 순위에 놓입니다. 최적화 혜택이 적용될 수 있는 오브젝트 볼륨은 애플리케이션에 의해 크게 달라지기 때문입니다. 그러나 일반적으로 이 값을 기본값 25보다 더 적게(예: 8) 낮춰야 합니다.

이 매개변수에 대한 모든 변경사항은 tenuring과 관련된 데이터 분석을 통해 정당화되어야 합니다. 이 데이터를 얻으려면 -XX:+PrintTenuringDistribution 매개변수를 사용할 수 있습니다.

문제점 방지 문제점 방지: -XX:SurvivorRatio= option은 JVM 매개변수 -XX:+UseAdaptiveSizePolicy와 호환되지 않습니다. 상황에 따라 하나를 사용하십시오. gotcha

-XX:TargetSurvivorRatio=

-XX:+UseAdaptiveSizePolicy 매개변수에서 제공하는 내장 조정을 사용하는 대신, 기본 처리량/병렬 청소(scavenge) 콜렉터를 사용하지만 이 청소(scavenge) 콜렉터를 수동으로 조정하려는 경우 이 매개변수를 사용합니다.

이 매개변수는 JVM이 생존(survivor) 공간의 활용율을 늘리도록 권장합니다. 이를 통해 가능한 경우 조기 승격을 방지하고 젊은 세대에서 오브젝트를 수집할 기회를 최대화합니다. 기본값은 50입니다. 이 매개변수를 90으로 설정하면 이러한 영역의 활용율을 높일 수 있습니다.

-XX:+UseAdaptiveSizePolicy

기본 처리량/병렬 청소(scavenge) 콜렉터를 통해 내장 조정을 사용하려면 이 매개변수를 사용합니다.

자동 운영 체제 탐지 외에도 Sun은 처리량 목표 및 처리량 콜렉션 전략의 효율성을 최적화하기 위해 자율적으로 JVM을 조정하려는 조정 알고리즘을 포함합니다. 이 조정 알고리즘은 기본적으로 켜져 있으며 -XX:+UseAdaptiveSizePolicy 매개변수를 사용하여 명시적으로 이에 참여합니다. 이 조정 알고리즘은 일반적으로 대부분의 애플리케이션 워크로드에 대해 만족스러운 결과를 달성하며, 추가 조정 노력을 수행하지 않아도 됩니다. 그러나 프로덕션 환경에서 이를 사용하기 전에 워크로드에 대해 이 알고리즘을 테스트하고 처리량 요구사항을 만족하는지 확인해야 합니다.

-XX:+UseConcMarkSweepGC

이 매개변수를 사용하여 동시 low-pause mark-sweep 콜렉터를 사용 가능하게 합니다. 이 가비지 콜렉션 모드는 세대간 가비지 콜렉션을 재구성합니다. 따라서 시스템은 특별히 젊은 세대의 컨텐츠를 수집해야 하는 경우 이로 인해 발생하는 공격적 일시정지를 최소화합니다.

또한 이 매개변수는 젊은 세대 또는 eden 영역의 범위도 최소화합니다. 일반적으로 서버 클래스 시스템은 다중 프로세서의 가용성을 탐지하고 사용 가능한 작업의 제한된 시간만 존재하는 경우에도 절대적으로 최소 일시정지를 전달하려는 노력의 일환으로 병렬로 젊은 세대를 수집하려고 합니다. 그러면 조정 오버헤드 이후에 다중 스레드 사용의 이점을 거의 제공하지 않습니다. 세대간 가비지 콜렉션에서 더 이상 수행하지 않는 작업을 오프셋하려면 일반적으로 처리량 콜렉터 설정과 비교했을 때 약 10 - 30%만큼 기본 힙에 커미트된 자원을 늘려야 합니다.

-XX:+UseParallelGC

기본 처리량/병렬 청소(scavenge) 콜렉터를 사용하려면 이 매개변수를 사용합니다.

서버 JVM의 기본 가비지 콜렉션 모드는 포그라운드 stop-the-world 태스크와 병렬로 젊은 세대에 대해 부 가비지 콜렉션을 수행하는 처리량 콜렉터를 수용하는 것입니다. 이 콜렉터는 -XX:+UseParallelGC 매개변수를 사용하여 명시적으로 사용 가능하게 할 수 있습니다. 처리량 이외의 목표를 지정할 수 있습니다. 그러나 이러한 목표를 달성하지 않을 경우 페널티는 꽤 심각할 수 있으며 치명적인 메모리 부족 오류를 일으킬 수 있습니다.


주제 유형을 표시하는 아이콘 참조 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rprf_hotspot_parms
파일 이름:rprf_hotspot_parms.html