목차
JVM参数分类 " >JVM参数分类
堆参数设置 " >堆参数设置
堆参数设置 " >堆参数设置
元空间参数 " >元空间参数
메타공간 매개변수 " >메타공간 매개변수
栈参数设置 " >栈参数设置
수집기 매개변수 설정 " >수집기 매개변수 설정
GC 전략 매개변수 구성 " >GC 전략 매개변수 구성
Dump异常快照 " >Dump异常快照
8G内存的服务器该如何设置 " >8G内存的服务器该如何设置
项目中,GC日志配置 " >项目中,GC日志配置
Java Java인터뷰 질문들 Meituan 인터뷰: 여러분에게 익숙한 JVM 튜닝 매개변수는 무엇입니까? 다행히 제가 준비했습니다!

Meituan 인터뷰: 여러분에게 익숙한 JVM 튜닝 매개변수는 무엇입니까? 다행히 제가 준비했습니다!

Aug 24, 2023 pm 03:25 PM
JVM 최적화 JVM 전화


Meituan 인터뷰: 여러분에게 익숙한 JVM 튜닝 매개변수는 무엇입니까? 다행히 제가 준비했습니다!
img

오늘은 JVM일반적으로 사용되는 일부 매개변수를 조정합니다. JVM调优常用的一些参数。

X或者XX开头的都是非标准化参数

Meituan 인터뷰: 여러분에게 익숙한 JVM 튜닝 매개변수는 무엇입니까? 다행히 제가 준비했습니다!

意思就是说标准化参数不会变,非标准化参数可能在每个JDK版本中有所变化,但是就目前来看X开头的非标准化的参数改变的也是非常少。

格式:-XX:[+-]<name> 表示启用或者禁用name属性。
例子:-XX:+UseG1GC(表示启用G1垃圾收集器)
로그인 후 복사

-XX:+PrintCommandLineFlags查看当前JVM

로 시작하는 모든 것은 표준화된 매개변수는 변경되지 않는다고 하며, 표준화되지 않은 매개변수는 각 JDK 버전에서 변경사항이 있었지만 지금까지 X로 시작하는 비표준 매개변수는 거의 변경되지 않았습니다. 🎜
-Xms10M -Xmx10M -Xmn2M -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=D:\study\log_hprof\gc.hprof
로그인 후 복사
로그인 후 복사
🎜-XX:+PrintCommandLineFlags보기 현재JVM 관련 매개변수 세트: 🎜
Meituan 인터뷰: 여러분에게 익숙한 JVM 튜닝 매개변수는 무엇입니까? 다행히 제가 준비했습니다!

JVM参数分类

根据JVM参数开头可以区分参数类型,共三类:“-"、" -X”、“-XX</ code>”,<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">JVM参数开头可以区分参数类型,共三类:“-”、“-X”、“-XX”,

标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;

例子:-verbose:class-verbose:gc-verbose:jni……

非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

例子:Xms20m-Xmx20m-Xmn20m-Xss128k……

标准参数(-):所有的JVM实现島必须实现这些参数的功能,而且向后兼容;

例子:-verbose:class,-verbose:gc-verbose:jni…足,且不保证向后兼容; 🎜🎜例子:<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba (27, 31, 35, 0.05);글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace;단어 나누기: break-all;색상: rgb(239, 112, 96);">Xms20m< /code>,<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">-Xmx20m,-Xmn20m-Xss128k…各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;🎜<p data-tool="mdnice编辑器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">例子:<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; background-color: rgba(27, 31, 35, 0.05 );font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">-XX:+PrintGCDetails-XX:-UseParallelGC,<코드 스타일 ="글꼴 크기: 14px; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 배경 색상: rgba(27, 31, 35, 0.05); 글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">-XX:+PrintGCTimeStamps……-XX:+PrintGCDetails-XX:-UseParallelGC-XX:+PrintGCTimeStamps……

堆参数设置

-Xms 初始堆大小,ms是memory start的简称 ,等价于-XX:InitialHeapSize-Xmx 最大堆大小,mx是memory max的简称 ,等价于参数-XX:MaxHeapSize

注意:在通常情况下,服务器项目在运行过程中,堆空间会不断的收缩与扩张,势必会造成不必要的系统压力。

所以在生产环境中,JVMXmsXmx要设置成大小一样的,能够避免GC

堆参数设置

-Xms 初始堆大小,ms是memory start的简称 ,等价于-XX:InitialHeapSize-Xmx 最大堆大小,mx是memory max的简称 ,等价于参数-XX:MaxHeapSize🎜

주의 사항: 服常情况下, 服务器项目在运行过程中,堆空间会不断的收缩与扩张, 势必会造成不必要的系统压力。🎜

所以在生产环境中,JVMXmsXmx要设置成大小一样的,能够避免GC는 더 이상 사용할 수 없습니다.🎜

<코드 스타일="글꼴 크기: 14px;패딩: 2px 4px;국경 반경: 4px;마진-오른쪽: 2px;마진-왼쪽: 2px;배경-색상: rgba(27, 31, 35, 0.05) ;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">-XX:NewSize=n 설정 젊은 세대 크기-XX:NewRatio=n Young Generation과 Old Generation의 비율을 설정합니다. -XX:NewSize=n 设置年轻代大小-XX:NewRatio=n 设置年轻代和年老代的比值。

如:-XX:NewRatio=3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4,默认新生代和老年代的比例=1:2-XX:SurvivorRatio=n 年轻代中Eden区与两个Survivor区的比值。

注意Survivor区有两个,默认是8,表示:Eden:S0:S1=8:1:1

如:-XX:SurvivorRatio=3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5。

元空间参数

-XX:MetaspaceSizeMetaspace 空间初始大小,如果不设置的话,默认是20.79M,这个初始大小是触发首次 Metaspace Full GC

예:-XX:NewRatio=3</ code >는 Young 세대와 Old 세대의 비율이 <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; 배경 색상: rgba(27, 31, 35, 0.05); 글꼴 계열: "Operator Mono", Consolas, Monaco, Menlo, monospace; 단어 나누기: break-all; 색상: rgb(239, 112, 96) ;">1: 3, 젊은 세대는 전체 젊은 세대와 노년 세대의 1/4을 차지하며, 신세대 대 구세대의 기본 비율=1:2. -XX:SurvivorRatio=n 젊은 세대 두 개의 생존자 영역에 대한 에덴 영역의 비율입니다. 🎜🎜두 개의 생존자 영역이 있으며 기본값은 8입니다. 즉, Eden:S0:S1=8:1:1🎜🎜예: -XX:SurvivorRatio=3, 이는 Eden: Survivor=3:2, Survivor 영역은 전체 젊은 세대의 1/5을 차지합니다. 🎜

메타공간 매개변수

🎜-XX:MetaspaceSizeMetaspace 공간의 초기 크기입니다. 설정하지 않은 경우 기본값은 20.79M입니다. 이 초기 크기는 처음 실행될 때 Metaspace Full GC 의 문턱. 🎜

例如:-XX:MetaspaceSize=256M -XX:MetaspaceSize=256M

-XX:MaxMetaspaceSizeMetaspace 最大值,默认不限制大小,但是线上环境建议设置。

例如:-XX:MaxMetaspaceSize=256M

-XX:MinMetaspaceFreeRatio:最小空闲比,当 Metaspace 发生 GC 后,会计算 Metaspace 的空闲比,如果空闲比(空闲空间/当前 Metaspace 大小)小于此值,就会触发 Metaspace 扩容。默认值是 40 ,也就是 40%,例如 -XX:MinMetaspaceFreeRatio=40

-XX:MaxMetaspaceFreeRatio:最大空闲比,当 Metaspace发生 GC 后,会计算 Metaspace 的空闲比,如果空闲比(空闲空间/当前 Metaspace 大小)大于此值,就会触发 Metaspace 释放空间。默认值是 70 ,也就是 70%,例如 -XX:MaxMetaspaceFreeRatio=70

-XX:MaxMetaspaceSize메타 공간 最大值,默认不限제대소,但是线上环境建议设置。🎜🎜例如:-XX:MaxMetaspaceSize=256M🎜🎜-XX:MinMetaspaceFreeRatio:最小空闲比,当 메타스페이스 发生 GC 后,会计算 메타공간 적 공간 크기: 14px; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 배경색: rgba(27, 31, 35, 0.05); 글꼴 계열: "Operator Mono" , Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">메타스페이스 大小)小于此值,就会触发 메타스페이스 扩容。默认值是 40 ,也就是 40%,例如 - XX:MinMetaspaceFreeRatio=40🎜🎜-XX:MaxMetaspaceFreeRatio:最大空闲比,当 메타공간发生 GC 后,会计算 메타스페이스 적공闲比,如果공闲比(공공공공间/当前 Metaspace 大小)大于此值,就会触发 메타공간 释放空间。默认值是 70 ,也就是 70%,例如 -XX:MaxMetaspaceFreeRatio=70🎜

MetaspaceSizeMaxMetaspaceSize设置为同样大小,避免频繁扩容。

栈参数设置

-Xss:栈空间大小,栈是线程独占的,所以是一个线程使用栈空间的大小。

例如:-Xss256K,如果不设置此参数,默认值是1M,一般来讲设置成 256K이면 충분하다고 권장합니다.

수집기 매개변수 설정

직렬 가비지 수집기(신세대)

활성화: -XX:+UseSerialGC 끄기: -XX:-UseSerialGC //신세대는 Serial을 사용하고 구세대는 SerialOld를 사용합니다

ParNew 가비지 컬렉터(신세대)

Enable -XX:+UseParNewGC -XX:-UseParNewGC 끄기 //신세대는 ParNew 함수를 사용하고 구세대는 CMS

Parallel Scavenge Collector(신세대) 함수를 사용합니다

-XX:+UseParallelOldGC 활성화 -XX:-UseParallelOldGC 끄기 //새로운 세대는 Parallel Scavenge 기능을 사용합니다. Old 세대는 Parallel Old Collector

ParallelOl 가비지 컬렉터(이전 세대)

enable -XX:+UseParallelGC를 사용합니다. -XX:-UseParallelGC 끄기 //새로운 세대는 Parallel Scavenge 기능을 사용합니다. Old 세대는 Parallel Old Collector

CMS 가비지 컬렉터(이전 세대)

enable -XX:+UseConcMarkSweepGC를 사용합니다. -XX:-UseConcMarkSweepGC

G1 가비지 수집기

끄기 -XX:+UseG1GC 켜기 -XX:-UseG1GC

GC 전략 매개변수 구성

GC 일시 중지 시간을 끄면 가비지 수집기는 이 시간을 달성하기 위해 젊은 세대를 줄이는 등 다양한 수단을 사용하려고 시도합니다

-XX: MaxGCPauseMillis

GC를 트리거하는 힙 점유 비율은 마킹 주기를 트리거하는 Java 힙 점유 임계값입니다. 기본 점유율은 전체 Java 힙의 45%입니다

-XX:InitiatingHeapOccupancyPercent=n

신세대가 수용할 수 있는 가장 큰 객체 그보다 크면 Old Generation에 직접 할당됩니다. .0은 제한이 없음을 의미합니다.

-XX:PretenureSizeThreshold=1000000 //

Old Generation의 최소 GC Age를 입력하고 Young Generation 객체를 Old Generation 객체의 최소 Age 값으로 변환합니다. 기본값은 7

-XX: InitialTenuringThreshol=7

Old Generation을 업그레이드합니다. age, 최대값은 15

-XX :MaxTenuringThreshold

GC 병렬 실행 스레드 수

-XX:ParallelGCThreads=16

System.gc()를 비활성화합니다. 이 메서드는 기본적으로 FGC를 트리거하고 매개변수의 UseG1GC 및 UseConcMarkSweepGC를 무시하므로 필요한 경우 이 메서드를 비활성화할 수 있습니다.

-XX:-+DisableExplicitGC

처리량 크기 설정, 기본값은 99

XX:GCTimeRatio

적응형 전략, 각 영역의 비율, 이전 세대로의 승격 연령을 설정합니다. 다른 매개변수는 자동으로 조정됩니다. 처리량과 일시 중지 시간 간의 균형을 유지합니다.

XX:UseAdaptiveSizePolicy

프로그램 실행 시간이 차지하는 GC 시간의 비율 설정

GCTimeRatio

Dump异常快照

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆内存出现OOM的概率是所有内存耗尽异常中最高的,出错时的堆内信息对解决问题非常有帮助。

所以给JVM设置这个参数(-XX:+HeapDumpOnOutOfMemoryError),让JVM遇到OOM异常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址。

这对于特别是对相隔数月才出现的OOM异常尤为重要。

-Xms10M -Xmx10M -Xmn2M -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=D:\study\log_hprof\gc.hprof
로그인 후 복사
로그인 후 복사

-XX:OnOutOfMemoryError

表示发生OOM后,运行jconsole.exe程序。

这里可以不用加“”,因为jconsole.exe路径Program Files含有空格。利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。

-XX:OnOutOfMemoryError="C:\Program Files\Java\jdk1.8.0_151\bin\jconsole.exe"
로그인 후 복사

8G内存的服务器该如何设置

java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
로그인 후 복사

-Xmx3500m 设置JVM最大可用内存为3550M。

-Xms3500m 设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。-Xmn2g 设置年轻代大小为2G

整个堆大小=年轻代大小 + 年老代大小 + 方法区大小

-Xss128k 设置每个线程的堆栈大小。

JDK1.5以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

-XX:NewRatio=4 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 。

-XX:SurvivorRatio=4 设置年轻代中Eden区与Survivor区的大小比值。

设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6 -XX:MaxPermSize=16m 设置持久代大小为16m。

-XX:MaxTenuringThreshold=0 设置垃圾最大年龄。

如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象在年轻代的存活时间,增加在年轻代即被回收的概论。

项目中,GC日志配置

比如,我们启动一个user-service项目:

 java  
 -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
 -XX:+UseGCLogFileRotation 
 -XX:+PrintHeapAtGC -XX:NumberOfGCLogFiles=5  
 -XX:GCLogFileSize=20M    
 -Xloggc:/opt/user-service-gc-%t.log  
 -jar user-service-1.0-SNAPSHOT.jar
로그인 후 복사

参数解释:

 -Xloggc:/opt/app/ard-user/user-service-gc-%t.log   设置日志目录和日志名称
 -XX:+UseGCLogFileRotation           开启滚动生成日志
 -XX:NumberOfGCLogFiles=5            滚动GC日志文件数,默认0,不滚动
 -XX:GCLogFileSize=20M               GC文件滚动大小,需开启UseGCLogFileRotation
 -XX:+PrintGCDetails                 开启记录GC日志详细信息(包括GC类型、各个操作使用的时间),并且在程序运行结束打印出JVM的内存占用情况
 -XX:+ PrintGCDateStamps             记录系统的GC时间           
 -XX:+PrintGCCause                   产生GC的原因(默认开启)
로그인 후 복사

项目中没用过怎么办?

对于很多没用过的人来说,面试官问项目中这些参数是怎么用?此时,很容易选择妥协,傻傻的回答没用过

偷偷的告诉你,很多面试官也没有用过。

另外,你可以自己搞个小项目,把JVM参数设置小点,使用测试工具JMeter,多线程测试一下。

위 내용은 Meituan 인터뷰: 여러분에게 익숙한 JVM 튜닝 매개변수는 무엇입니까? 다행히 제가 준비했습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)