jdk1.8 - JVM 튜닝 및 분석

대부분의 기사는 JVM 각 매개 변수를 구성하는 방법에 대해,하지만 결국 어느 정도의 생산 환경 구성 매개 변수의 값이 아닌 특정 대상입니다. 제 네 부분, 즉 JVM 구성은 GC 처리 및 특정 설정 값을 설명했다.


설명의 .JVM 공간

  1. JDK 1.7 및 이전 버전, 자바 클래스 정보, 정수 풀은, 정적 변수는 페름 (영구 대신)에 저장됩니다. 등급 메타 데이터 및 정적 변수에 할당 될 때 클래스 파마 배치 가비지 수집기로부터 언로드 파마 클래스 로딩.

  2. 로컬 메모리에 클래스 메타 데이터의 변환 JDK 1.8 JVM 프레임 워크. 또, Java 힙에 상수 풀 정적 변수. HotSopt VM 명시 적으로 할당하고 로컬 메타 데이터 클래스의 메모리를합니다. PermSize 구성이 유효 지금보다 로컬 메모리를 사용할 수를 MaxPermSize 제한이 아키텍처에서, 메타 정보 카테고리는 원래 -XX를 초과했습니다. 이것은 어느 정도 런타임 클래스를 다수 발생했다 빈번한 전체 GC에 의해 야기되는 문제, 반사의 사용과 같은 다른 런타임 에이전트를 해결할

 
JVM 메모리

드라이 : 당신은 가장 눈에 띄는 변화를 찾을 수 있습니다 로컬 메모리에 가상 머신에서 변화 차원 공간이며, 기본적으로 요소 공간의 크기가 로컬 메모리에 의해 제한됩니다. 공간과 영구 세대의 부족 OOM이 예외가 발생하기 때문에하지 이는 미래에 그.
jdk1.8 클래스 아래 PermGen 항아리에 저장된 패킷 데이터의 이전 버전은 PermGen 크기가 고정되어 있으며 항목의 공용 클래스 사이에 공유 할 수 없습니다, OOM 예외를 공격하기 쉽습니다.
변경 metaSpaces 후, 각 프로젝트의 클래스는 프로젝트의 숫자로, 같은 메모리 공간을 공유 할 수는 향상된 메모리 사용, 가비지 컬렉션, 오직 아파치 - 일반적인 클래스의 사본을 저장합니다 metaSpaces에, 아파치 - 일반적인 패키지를 인용 한 더 효율적입니다.

두 .JVM 매개 변수 구성

  1. jdk1.8 년 전, 생산 환경은 일반적으로 다음과 같은 구성을 가진다
-XX:PermSize=512M -XX:MaxPermSize=1024M

JVM이 자바 클래스 정보 저장의 초기 크기를 대신 영구적 인 표현, 그리고 정적 변수 1024M 최대 512M의 정수 풀의 영역에서. 프로젝트 클래스도 발생할 가능성이있는 경우 프로젝트 시작 후,이 값은 고정되어 OutOfMemoryError: PermGen예외.

  1. JDK1.8를 업그레이드 한 후, 위의 구성은 파마가되었다
-XX:MetaspaceSize=512M XX:MaxMetaspaceSize=1024M

구성되지 않은 경우 I는 로컬 메모리 크기 제한에 의해 MetaSpace 전에 말했듯이 MetaspaceSize는있는 jinfo, MaxMetaspaceSize가 매우 큰하여 기본 MetaspaceSize 크기 (약 21M)를 볼 수 있습니다.

jinfo -flag MetaspaceSize 1234  #结果为:-XX:MetaspaceSize=21807104
jinfo -flag MaxMetaspaceSize 1234 #结果为:-XX:MaxMetaspaceSize=18446744073709547520

드라이 : MetaspaceSize FullGC는, 임계 값, 약 21M의 기본 시작 구성, 최소 크기 임계 값 사용자 정의 구성을 할 수있다. 공간 사용량 임계치는, FullGC 트리거 도달 확장의 값 동안. 실제 복셀 공간이 임계 값 미만인 경우 때 GC 물론,이 값은 감소한다.
빈번한 FullGC도 OOM 발생할 수 너무 작게 설정하면, 원 공간의 최대 값을 MaxMetaspaceSize.

세 .GC (GarbageCollection) 과정

먼저 적절한 GC 아래의 과정을 설명하기 위해 온라인 훔친 큰 그림을 사용 올렸다.

 

 
의 image.png
  1. 새로운 객체는 새 에덴 지구 (에 위치 에덴 음, 창조 )
  2. 에덴 지구, 개체가 죽일 직접 참조되지 않는다 (마이너 GC) 깨끗한 수행 할 전체 또는 거의 전체, 객체에 대한 참조가 비교적 큰의 나이를, 지역 S0로 이동
  3. 에덴 다음 지역 거의 모든 시간, 작업의 단계, 및 S0와 S1은 한번, 원칙이 언제든지 저장할 수 비어 [유지하기 위해 지역의 대상 영역으로 이전 에덴 S0와 S1에있을 것입니다 객체]
  4. 다음, 에덴 지역 거의 풀 타임에서, 그것은 [S1]는 영역이 비어 마지막 작업,이 때의 영역에 객체의 이전 에덴 S1 및 S0 지역이 될 것입니다
  5. 거의 가득, S0 또는 S1까지 에덴 지역은 거의 풀 타임, 이번에는 이전 두 지역은 오래된 지구에 객체를 넣어
  6. 옛 지역도 거의 가득 찰 때까지 사이클에서, 에덴 지역도 거의 가득,이 프로그램 이후에 생성 된 개체에 대한 메모리를 확보, 클렌징 (FullGC)를 수행하는 전체 메모리 영역이있을 것이다 탱 장소를 실행합니다.

에덴 영역 및 생존자 마이너 GC라는 영역을 청소, 오래된 주요 GC로 알려진 지역을 정리, 전체 힙 공간 정리 - 과거와 젊은 세대의라는 전체 GC를 포함합니다.

네. JVM은 구성 안내서 매개 변수

전반적인 이해에 대한 JVM의 첫 세 부분으로,이 문서의 다음 초점을 맞 춥니 다.

-XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M -Xms256m -Xmx256m

본문이 위에서 아래로 배치되어 간단히 세트를 초기 값과 최대 복셀 공간 초기 최대 힙 공간을 의미한다.

왜 128M로 설정 MetaspaceSize? 왜 힙 메모리는 초기 값 대신 512M의 XMS 256M로 설정?

공식 가이드 자바에 따르면,

 

 
의 image.png
  • Java 힙 크기, 라이브 오브젝트의 XMS와의 -Xmx 세트는 그 FullGC 후 년 된이 차지하는 3 ~ 4 배의 메모리이며, 3 ~ 4 세 배
    영구 대신 PermSize와를 MaxPermSize(차원 공간)을 1.2-1.5 배 오래 생존 해 목표로 설정된다.
    1-1.5 세 시간에 대한 젊은 세대의 설정된 목표의 XMN 생존.
    이전의 메모리 크기는 이전 시대에 2 ~ 3 회 생존 개체를 설정합니다.

수 있도록 한 시스템은 다양한 측정 시스템을보고 몇 시간 동안 실행 한 후 구성을 진행합니다. 그러면 jstat 도구의 경우 다음과 같은 JVM을 확인

jstat -gc 12345
###
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
13824.0 22528.0 13377.0  0.0   548864.0 535257.2  113152.0   46189.3   73984.0 71119.8 9728.0 9196.2     14    0.259   3      0.287    0.546

OU가 이전의 메모리 점유가 (약 45M) 46189.3 K이며, 다음과 같이 구성 파라미터에 대응하는 JVM이 수정되어야

-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M -Xms180m -Xmx180m

추천

출처www.cnblogs.com/jtlgb/p/11726210.html