[가상 머신] 자바 JVM 튜닝

전송 : HTTPS : //www.cnblogs.com/starhu/p/6400348.html에 utm_source = itdadao & utm_medium을 = 추천?

  1. 힙 사이즈
    , 사용 가능한 가상 메모리 제한 시스템 물리 메모리를 사용할 제한 시스템은 운영 체제와 관련된 데이터 모델 (BT-32 또는 64 비트) 값 : JVM 최대 힙 사이즈는 세 가지 제한을 갖는다. 일반적 1.5G ~ 2G에 한정되는 32 비트 시스템, 운영 체제 (64) 무제한 메모리. 나는 최대가 1,478m로 설정, 테스트에서 Windows Server 2003 시스템, 3.5G 물리적 메모리, JDK5.0 있습니다.
    일반 설정 :
    • 자바  -Xmx3550m -Xms3550m -Xmn2g  -Xss128k
      -
      Xmx3550m 다음 3550M에 사용할 설정 JVM 최대 메모리.
      -Xms3550m : 3,550m를 촉진하기 위해 JVM 메모리 설정. 이 값은 재 할당 메모리 가비지 콜렉션이 완료되지 않도록 같은 -Xmx 각 JVM을 설정할 수있다.
      -Xmn2g : 설정 젊은 세대 2G의 크기입니다. 전체 JVM 메모리 크기 = 크기 + 영구 세대 크기 + 크기의 젊은 세대 구세대 . 젊은 세대의 증가가 이전 세대의 크기를 줄일 수 있도록 영구 세대는 일반적으로 고정 된 크기 64m이다. 시스템 성능에이 값은 큰 영향은, 일 관계자는 3/8의 전체 힙에 대한 구성을 권장합니다.
      -Xss128k : 각 스레드의 스택 크기를 설정합니다. 각 스레드 스택 크기가 256K 전에 각 스레드 스택 크기 후 JDK5.0는 1M이다. 필요한 조정의 더 많은 응용 프로그램 메모리 크기를 스레드. 동일한 물리적 메모리에서이 값을 줄이면 더 많은 스레드를 생성 할 수 있습니다. 그러나, 프로세스 내에서 운영 체제 스레드 수는 여전히 3000 및 5000에없는 무제한 세대, 경험, 제한.
    • -Xmx3550m -Xms3550m -Xss128k 자바  -XX : NewRatio = -XX 4 :. SurvivorRatio = -XX 4 :.를 MaxPermSize 16m -XX = = 0 MaxTenuringThreshold입니다
      -XX : = NewRatio 4.
      : 세트 (에덴과 두 생존자의 지역을 포함) 젊은 세대 구세대 비율 (제거 영구 세대). 4로 설정되어, 젊은 세대와 1 구세대 비율의 비율 : 4, 젊은 세대 1/5의 전체 스택
      -XX : SurvivorRatio = 4 : 설정 에덴 서바이버 젊은 세대 영역의 면적 비율의 크기입니다. (4)에 설정하고, 생존자 에덴 영역과 두 영역의 비율은 2 : 4, 총면적 서바이버 젊은 세대 1/6
      -XX =를 MaxPermSize 16m : 영구 생성 16m의 크기를 설정하는 단계를 포함한다.
      -XX는 : MaxTenuringThreshold입니다 = 0 : 쓰레기의 최대 사용 기간을 설정합니다. 바로 이전 세대에, 생존자 영역없이 다음 0으로 개체의 젊은 세대를 설정 한 경우 . 효율성을 향상시킬 수있는 응용 프로그램의 이전 세대의 더하십시오. 이 값이 큰 값으로 설정하면, 젊은 세대 개체는 개체를 증가 후 생존 기간의 젊은 세대가 할 수 생존자 지역에서 여러 번 복사됩니다 , 젊은 세대에 대한 소개의 증가, 즉 재활용을.
  2. 선택된 수집기
    : JVM 세 가지 옵션을 준 직렬 콜렉터 컬렉터 병렬 동시 콜렉터 있지만 직렬 컬렉터 병렬 동시 콜렉터 수집기 선택 그래서 여기에 주로 소량의 데이터에만 적용 . 다른 수집가를 사용하려면 기본적으로 JDK5.0 이전에, 직렬 수집을 시작할 때 적절한 매개 변수를 추가 할 필요가 사용하고있었습니다. JDK5.0, JVM이 전류에 기초하여 후 시스템 구성 결정된다.
    1. 스루풋 우선 평행 수집기
      등 과학 기술 배경 처리를위한 소정의 일정한 목표에 도달하기 위해 상기 주로 평행 콜렉터를 설명한다.
      구성 :
      • -Xmx3800m -Xms3800m -Xmn2g -Xss128k 자바  -XX : + UseParallelGC -XX : ParallelGCThreads = 20 인
        -XX : + UseParallelGC
        : 가비지 컬렉터 병렬 집 전체를 선택한다. 이 구성은 젊은 세대 유효합니다. 여전히 직렬 콜렉터의 이전 세대를 사용하면서 상기 구성 것을 젊은 세대는 동시 수집을 사용한다.
        -XX : ParallelGCThreads = 20이다
        : 스레드 번호 컬렉터 병렬 구성, 즉 : 동시에 많은 가비지 컬렉션 스레드. 이 설정 값은 프로세서의 수와 동일한 것이 바람직하다.
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX 자바 : + UseParallelGC -XX : ParallelGCThreads = 20 인  -XX : + UseParallelOldGC
        -XX : + UseParallelOldGC
        : 구성 이전 세대 가비지 컬렉션이 병행하여 수집된다. 병렬 콜렉터의 이전 세대 JDK6.0 지원.
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX 자바는 : + UseParallelGC   -XX : MaxGCPauseMillis = 100
        -XX : MaxGCPauseMillis = 100
        : 이 시간을 충족 할 수없는 경우 설정은 젊은 세대 가비지 컬렉션 때마다 최대 시간, JVM이 자동으로 어린 조정됩니다 크기를 대체하는 것은이 값을 충족합니다.
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX 자바 : + UseParallelGC -XX : MaxGCPauseMillis = 100  - XX : + UseAdaptiveSizePolicy
        -XX : + UseAdaptiveSizePolicy
        이 옵션이 설정되어, 병렬 콜렉터 자동 젊은 세대 영역의 크기와 대응하는 서바이버를 선택할 것 병렬 콜렉터가 열리면 비례 대역, 낮은 목표 주파수 시스템, 또는 모음에 해당하는 소정의 시간이 권장 값을 사용한다.
    2. 응답 시간 우선 동시 콜렉터
      상술 된 바와 같이, 동시 콜렉터는 주로 정지 시간이 가비지 콜렉션을 줄이는 시스템의 응답 시간을 보장한다. 애플리케이션 서버, 통신 및 기타 분야에 적합합니다.
      구성 :
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX 자바 : ParallelGCThreads = 20은  -XX : + UseConcMarkSweepGC -XX : + UseParNewGC
        -XX : + UseConcMarkSweepGC : 동시 수집 된 설정을했다. 이 구성을 테스트 한 후, -XX : NewRatio = 4 구성은 알 수없는 이유로 실패합니다. 따라서, 신세대의 크기는 바람직 -Xmn 제공되는 경우.
        -XX : + UseParNewGC : 젊은 대신 설정 병렬 컬렉터. CMS 수집과 동시에 사용할 수 있습니다. JDK5.0 위, JVM이 시스템 구성에 자신의 관련된 발명 설정할 수 있습니다,이 값을 설정할 필요가 없습니다.
      • -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX 자바 : + UseConcMarkSweepGC  -XX : CMSFullGCsBeforeCompaction = 5 -XX : + UseCMSCompactAtFullCollection
        -XX : CMSFullGCsBeforeCompaction는 :. 메모리 공간 동시 콜렉터가 정리되지 압축 않기 때문에, 그 일정 시간 후에 실행 생산할 예정 " 작업 효율을 파편 "는 감소한다. 이 값은 마무리 압축 후 몇 번 GC 메모리 공간을 실행하도록 설정되어 있습니다.
        -XX : + UseCMSCompactAtFullCollection : 이전 세대의 열기 압축. 성능에 영향을 미칠 수 있습니다,하지만 당신은 파편을 제거 할 수 있습니다
  3. 보충 정보
    JVM은 디버깅 정보를 인쇄, 명령 줄 매개 변수를 제공합니다. 다음의 몇 가지가 있습니다 :
    • -XX : + PrintGC의
      출력 형식 : GC 118250K-> 113543K (130112K ) 0.0094143 초]

                      [전체 GC 121376K-> 10414K (130112K) 0.0650971 초]

    • -XX : + PrintGCDetails의
      출력 형식 : GC [DefNew : 8614K-> 781K (9088K) 0.0123035 초] 118250K-> 113543K (130112K) 0.0124633 초]

                      [GC [DefNew : 8614K-> 8614K (9088K) 0.0000665 초] 종신 : 112761K-> 10414K (121024K) 0.0433488 초] 121376K-> 10414K (130112K) 0.0436268 초]

    • -XX : + PrintGCTimeStamps  -XX : + PrintGC 두 혼합하면서 위에서 사용 PrintGCTimeStamps
      출력 형태 : 11.851 [GC에 98328K-> 93620K (130112K) 0.0082960 초]
    • -XX은 : + PrintGCApplicationConcurrentTime : 각 가비지 컬렉션 전에 인쇄, 프로그램은 실행 시간을 방해하지 않습니다. 위 사용하여 혼합 될 수있다
      출력 양식을 : 응용 프로그램 시간 : 0.5291524 초를
    • -XX : + PrintGCApplicationStoppedTime은 : 인쇄 쓰레기 재활용 프로그램은 시간 동안 일시 중단됩니다. 그것은 위의와 혼합 될 수있다
      형태로 출력 : 총 시간은 어떤 파일을 응용 프로그램에 대한 스레드를 중단했다 : 0.0468229 초를
    • -XX : PrintHeapAtGC :打印GC前后的详细堆栈信息
      输出形式:
      34.702 [GC 호출 = 7 GC {힙 전 :
       DEF 차세대 총 55296K는 52568K [0x1ebd0000, 0x227d0000, 0x227d0000) 사용
      공간 49152K 에덴, 99 % 사용  [ 0x1ebd0000, 0x21bce430, 0x21bd0000)
      , 55 %가 사용 된 공간 6144K에서  [0x221d0000, 0x22527e10, 0x227d0000)
        공간 6144K로는, 0 % 사용한 [0x21bd0000는 0x21bd0000는 0x221d0000)
       종신 생성 총 69632K가 사용될 2696K [0x227d0000, 0x26bd0000, 0x26bd0000)
      공간 69632K 3 % 사용한  [0x227d0000가 0x22a720f8가 0x22a72200가 0x26bd0000)
       압축 파마 겐 총 8192K, 2898K 사용 [0x26bd0000, 0x273d0000, 0x2abd0000)
         공간 8192K가 35 % 사용 [0x26bd0000가 0x26ea4ba8가 0x26ea4c00가 0x273d0000)
          RO 공간 8192K, 66 % 사용 [0x2abd0000가 0x2b12bcc0가 0x2b12be00, 0x2b3d0000)
          RW 공간 12288K가 46 % 사용 [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)
      34.735 : [DefNew : 52568K-> 3433K (55296K), 0.0072126 초]을 55264K-> 6615K (124928K) GC 호출 = 8 이후 힙 :
       DEF 차세대 총 55296K가 사용 3433K [0x1ebd0000, 0x227d0000는 0x227d0000)는
      에덴 공간 49152K, 0 % 사용  [0x1ebd0000, 0x1ebd0000, 0x21bd0000)
        , 55 %는 [0x21bd0000, 0x21f2a5e8, 0x221d0000) 사용 공간 6144K에서
        공간 6144K로는 0 % 사용한 [0x221d0000가 0x221d0000, 0x227d0000)
       종신 생성 총 69632K는 3182K를 사용 [0x227d0000, 0x26bd0000, 0x26bd0000)
      공간 69632K, 4 %를 사용  [0x227d0000는 0x22aeb958는 0x22aeba00는 0x26bd0000)
       압축 파마 겐 총 8192K는 2898K [0x26bd0000, 0x273d0000, 0x2abd0000) 사용
         8192K가 35 %가 사용되는 공간 [0x26bd0000, 0x26ea4ba8, 0x26ea4c00, 0x273d0000)
          RO 공간 8192K 66 %의 [0x2abd0000, 0x2b12bcc0, 0x2b12be00, 0x2b3d0000) 사용
          , 46 %가 사용 RW 공간을 12288K [0x2b3d0000, 0x2b972060, 0x2b972200, 0x2bfd0000)
      }
      , 0.0757599 초]
    • -Xloggc : 파일명 : 상기와 관련하여 여러 가지 사용 분석을 위해 파일에 기록 된 로그 정보.
  4. 일반적인 구성 요약
    1. 힙 설정
      • -Xms : 초기 힙 크기
      • -Xmx : 최대 힙 크기
      • -XX 다음 newSize와 = N- : 설정 젊은 세대의 크기
      • -XX : NewRatio = N : 젊은 세대와 노인 세대의 비율을 설정. 예를 들면 : 3, 1의 이전 세대의 비율로 젊은 세대를 보여주는 : 3, 총 젊은 세대와 젊은 세대 세 세대 1/4
      • -XX : SurvivorRatio = N- : 젊은 세대 영역 두 서바이버 영역이든 비. 참고 두 생존자의 영역이 있다는 것을. 예컨대 : 총면적 서바이버 젊은 세대 1/5 2 생존자 = 3 : 3, 에덴 표현
      • -XX : = N-를 MaxPermSize : 영구 세대의 크기를 설정
    2. 수집기 설정
      • -XX : + UseSerialGC는 : 직렬 콜렉터 구비
      • -XX : + UseParallelGC : 병렬로 배치 된 수집기
      • -XX : + UseParalledlOldGC : 이전 세대 수집기 평행하게 배치
      • -XX : + UseConcMarkSweepGC는 : 동시 콜렉터 구비
    3. 쓰레기 수집 통계
      • -XX : + PrintGC
      • -XX : + PrintGCDetails
      • -XX : + PrintGCTimeStamps
      • -Xloggc : 파일 이름
    4. 병렬로 배치 된 집
      • -XX : ParallelGCThreads = N- : CPU 세트의 개수가 병렬 콜렉터를 수집하는데 사용. 스레드 수를 수집하는 병렬.
      • -XX : MaxGCPauseMillis = N- : 최대 일시 정지 시간을 수집하는 것은 병렬로 제공된다
      • -XX : GCTimeRatio = N- : 시간의 쓰레기 수집 비율 시간을 실행하는 프로그램. 화학식 1 / (1 + N)
    5. 동시 수집기 설정
      • -XX : + CMSIncrementalMode : 모드 설정 증가합니다. 하나의 CPU 케이스.
      • -XX : ParallelGCThreads = N- : 동시 수집기가 수집 병렬 CPU의 개수가 사용될 때 젊은 세대 모드를 수집하기 위해 제공된다. 스레드 수를 수집하는 병렬.


넷째, 튜닝 요약

      1. 젊은 세대의 크기를 선택
        • 응용 프로그램의 우선 순위 응답 시간 : 큰 세트로 최소 시스템 응답 시간 제한 근처까지 (실제 상황에 따라). 이 경우, 발생 신세대 컬렉션 주파수는 최소이다. 동시에, 이전 세대 개체의 범위를 줄일 수있다.
        • 우선 애플리케이션 처리량 : 대형을 설정하는 것이 가능한 한, 기가비트의 수준에 도달 할 수 있습니다. 응답 시간이 요구되지 않기 때문에, 가비지 콜렉션은 일반적인 애플리케이션 8CPU 대해 병렬로 수행 될 수있다.
      2. 오래된 세대 크기 선택
        • 응용 프로그램의 우선 순위 응답 시간 : 크기 필요가 세트에주의해야하므로 일반적으로 고려하는, 수집가의 동시 구세대를 사용하여 동시 세션 비율기간 세션의 일부 매개 변수를. 힙이 작게 설정하면, 메모리 조각화, 높은 주파수와 명확한 표시의 전통적인 방법의 사용을 일시 중단 복구 응용 프로그램을 일으킬 수 있습니다 큰 힙이 더 긴 수집 시간을 필요로합니다. 가장 최적의 솔루션, 일반적으로 얻은 다음 데이터를 참조해야합니다
          • 동시 가비지 컬렉션 정보
          • 동시 영구 생성 컬렉션의 개수
          • 전통적인 GC 정보
          • 젊은 세대와 이전 세대의 재활용에 소요되는 시간의 비율
          젊은 세대와 걸리는 시간을 줄이기 위해 이전 세대는 일반적으로 응용 프로그램의 효율성을 높이기
        • 처리량 우선 순위 응용 프로그램 : 우선 순위 애플리케이션 처리량 일반적으로는 젊은 세대의 많은 더 작은 구세대 있습니다. 당신이 이전 세대가 살아있는 객체의 장기 저장을하는 동안, 중기 목표를 줄이기 위해 대부분의 단기 목표에서 최대한 복구 할 수 있도록 그 이유이다.
      3. 발생하는 파편의 작은 더미
        는 힙을 압축하지 않도록 이전 세대 동시 수집기, 마크, 청소 알고리즘을 사용하기 때문이다. 집 전체가 회수되면, 그 큰 객체에 할당 될 수있는 인접 공간을 병합한다. 힙 공간이 작은 경우에는, 몇 시간 동안 실행 한 후, "파편"동시 수집기가 충분한 공간을 찾을 수없는 경우, 다음 동시 수집기가 중지 한 후 복구를위한 방법을 삭제, 기존의 마커를 사용할 수있을 것입니다. 다음과 같이 "파편"이 나타나면해야 할 수도 있습니다 :
        • -XX : + UseCMSCompactAtFullCollection : 동시 컬렉터를 사용하는 경우, 이전 세대 압축 켜.
        • -XX : CMSFullGCsBeforeCompaction = 0 : 전체 GC 명세서 제공 횟수에 상기 구성의 경우, 이전 세대의 압축

추천

출처www.cnblogs.com/wjqhuaxia/p/11920545.html