


Meituan-Interview: Mit welchen JVM-Tuning-Parametern bin ich vertraut?
Aug 24, 2023 pm 03:25 PM
Machen wir uns heute damit vertraut, ungef?hrJVM
Optimieren Sie einige h?ufig verwendete Parameter. JVM
調優(yōu)常用的一些參數。
X或者XX開頭的都是非標準化參數

意思就是說標準化參數不會變,非標準化參數可能在每個JDK
版本中有所變化,但是就目前來看X開頭的非標準化的參數改變的也是非常少。
格式:-XX:[+-]<name> 表示啟用或者禁用name屬性。 例子:-XX:+UseG1GC(表示啟用G1垃圾收集器)
-XX:+PrintCommandLineFlags
查看當前JVM
JDK
-Version, aber bisher haben sich die nicht standardisierten Parameter, die mit X beginnen, nur sehr wenig ge?ndert. ??-Xms10M -Xmx10M -Xmn2M -XX:SurvivorRatio=8 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\study\log_hprof\gc.hprof??
-XX:+PrintCommandLineFlags
View Current<img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/001/273/727/d63fc363fa710c707d1e38539968540e-2.png" class="lazy"/ alt="Meituan-Interview: Mit welchen JVM-Tuning-Parametern bin ich vertraut?" ></figure><h2 id="span-style-display-inline-block-background-rgb-color-rgb-padding-px-px-px-border-top-right-radius-px-border-top-left-radius-px-margin-right-px-JVM參數分類-span-span-style-display-inline-block-vertical-align-bottom-border-bottom-px-solid-efebe-border-right-px-solid-transparent-span"><span style="display: inline-block;background: rgb(239, 112, 96);color: rgb(255, 255, 255);padding: 3px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px;"> JVM參數分類</span><span style="display: inline-block;vertical-align: bottom;border-bottom: 36px solid #efebe9;border-right: 20px solid transparent;"> </span></h2><p data-tool="mdnice編輯器" style="padding-top: 8px;padding-bottom: 8px;line-height: 26px;">根據Farbe: rgba(27, 31, 35, 0.05);Schriftfamilie: ?Operator Mono“, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);“ >JVM
參數開頭可以區(qū)分參數類型, 共三類:“-
”、“-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
參數開頭可以區(qū)分參數類型,共三類:“-
”、“-X
”、“-XX
”,標準參數(-):所有的JVM實現都必須實現這些參數的功能,而且向后兼容;
例子:-verbose:class
,-verbose:gc
,-verbose:jni……
非標準參數(-X):默認jvm實現這些參數的功能,但是并不保證所有jvm實現都滿足,且不保證向后兼容;
例子:Xms20m
,-Xmx20m
,-Xmn20m
,-Xss128k……
-verbose:class
,-verbose:gc
,-verbose:jni……
有jvm實現都滿足,且不保證向后兼容;????例子:-Xmn20m
,-Xss128k……
????非Stable參數(-XX):此類參數各個jvm實現會有所不同, 將來可能會隨時取消, 需要慎重使用;??例子:-XX:+PrintGCDetails
, -XX:-UseParallelGC
,-XX:+PrintGCTimeStamps……
-XX:+PrintGCDetails
,-XX:-UseParallelGC
,-XX:+PrintGCTimeStamps……
堆參數設置
-Xms
初始堆大小,ms是memory start的簡稱 ,等價于-XX:InitialHeapSize
-Xmx
最大堆大小,mx是memory max的簡稱 ,等價于參數-XX:MaxHeapSize
注意:在通常情況下,服務器項目在運行過程中,堆空間會不斷的收縮與擴張,勢必會造成不必要的系統(tǒng)壓力。
所以在生產環(huán)境中,
JVM
的Xms
和Xmx
要設置成大小一樣的,能夠避免GC
堆參數設置
-Xms
初始堆大小,ms是memory start的簡稱 等價于-XX:InitialHeapSize
-Xmx
最大堆大小, mx是memory max的簡稱, 等價于參數-XX:MaxHeapSize
??注意:在通常情況下, 服務器項目在運行過程中, 堆空間會不斷的收縮與擴張, 勢必會造成不必要的系統(tǒng)壓力.??
所以在生產環(huán)境中,
JVM
的Xms
和Xmx
要設置成大小一樣的,能夠避免GC
在調整堆大小帶來的不必要的壓力.??
-XX:NewSize=n
Einstellungen Gr??e der jungen Generation-XX:NewRatio=n
Legen Sie das Verh?ltnis zwischen junger und alter Generation fest.-XX:NewSize=n
設置年輕代大小-XX:NewRatio=n
設置年輕代和年老代的比值。如:
-XX:NewRatio=3
,表示年輕代與年老代比值為1:3
,年輕代占整個年輕代年老代和的1/4,默認新生代和老年代的比例=1:2
。-XX:SurvivorRatio=n
年輕代中Eden區(qū)與兩個Survivor區(qū)的比值。注意Survivor區(qū)有兩個,默認是8,表示:
Eden:S0:S1=8:1:1
如:
-XX:SurvivorRatio=3
,表示Eden:Survivor
=3:2,一個Survivor區(qū)占整個年輕代的1/5。元空間參數
-XX:MetaspaceSize:
Zum Beispiel:Metaspace
空間初始大小,如果不設置的話,默認是20.79M,這個初始大小是觸發(fā)首次Metaspace Full GC
-XX:NewRatio=3</ Code >, was angibt, dass das Verh?ltnis zwischen der jungen Generation und der alten Generation <code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px; Hintergrundfarbe: RGBA (27, 31, 35, 0,05);Schriftfamilie: ?Operator Mono“, Consolas, Monaco, Menlo, Monospace;Wortumbruch: Break-All;Farbe: RGB(239, 112, 96) ;">1: 3
, die junge Generation macht 1/4 der gesamten jungen und alten Generation aus,Standardverh?ltnis der neuen Generation zur alten Generation=1:2
.-XX:SurvivorRatio=n
Junge Generation Die Verh?ltnis des Eden-Gebiets zu den beiden Survivor-Gebieten. ????Beachten Sie, dass es zwei Survivor-Bereiche gibt. Der Standardwert ist 8, was bedeutet:Eden:S0:S1=8:1:1
????Zum Beispiel:-XX:SurvivorRatio=3
, was bedeutet:Eden: Survivor
=3:2, ein Survivor-Bereich macht 1/5 der gesamten jungen Generation aus. ??Metaspace-Parameter
??-XX:MetaspaceSize:Metaspace
Die anf?ngliche Gr??e des Leerzeichens. Wenn nicht festgelegt, ist der Standardwert 20,79 MB. Diese anf?ngliche Gr??e ist die Beim ersten Mal wird es ausgel?st. 35, 0,05);font -family: ?Operator Mono“, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">Metaspace Full GC 's Schwelle. ??例如:
-XX:MetaspaceSize=256M
-XX:MetaspaceSize=256M
-XX:MaxMetaspaceSize:
Metaspace
最大值,默認不限制大小,但是線上環(huán)境建議設置。例如:
-XX:MaxMetaspaceSize=256M
-XX:MinMetaspaceFreeRatio:最小空閑比,當
Metaspace
發(fā)生 GC 后,會計算Metaspace
的空閑比,如果空閑比(空閑空間/當前Metaspace
大小)小于此值,就會觸發(fā)Metaspace
擴容。默認值是 40 ,也就是 40%,例如 -XX:MinMetaspaceFreeRatio=40-XX:MaxMetaspaceFreeRatio:最大空閑比,當
-XX:MaxMetaspaceSize:Metaspace
發(fā)生 GC 后,會計算Metaspace
的空閑比,如果空閑比(空閑空間/當前 Metaspace 大小)大于此值,就會觸發(fā)Metaspace
釋放空間。默認值是 70 ,也就是 70%,例如 -XX:MaxMetaspaceFreeRatio=70
-XX:MaxMetaspaceSize=256M
????-XX:MinMetaspaceFreeRatio:最小空閑比,當Metaspace
發(fā)生 GC 后,會計算Metaspace
的空閑比,如果空閑比(空閑空間/當前Metaspace
大小)小于此值,就會觸發(fā)Metaspace
擴容。默認值是 40,也就是 40%,例如 - XX:MinMetaspaceFreeRatio=40????-XX:MaxMetaspaceFreeRatio:最大空閑比,當Metaspace
發(fā)生 GC 后,會計算Metaspace
釋放空間。默認值是 70,也就是 70%,例如 -XX:MaxMetaspaceFreeRatio=70
??Es wird empfohlen, dass
MetaspaceSize
和MaxMetaspaceSize
設置為同樣大小,避免頻繁擴容。棧參數設置
-Xss:??臻g大小,棧是線程獨占的,所以是一個線程使用??臻g的大小。
例如:
-Xss256K
,如果不設置此參數,默認值是1M
,一般來講設置成256K
ausreicht.Collector-Parametereinstellungen
Serieller Garbage Collector (neue Generation)
Aktivieren: -XX:+UseSerialGC Deaktivieren Sie: -XX:-UseSerialGC //Die neue Generation verwendet Serial und die alte Generation verwendet SerialOld
ParNew Garbage Collector (neue Generation)
Enable -XX:+UseParNewGC Deaktivieren Sie -XX:-UseParNewGC //Die neue Generation verwendet die Funktion ParNew und die alte Generation verwendet die Funktion CMS
Parallel Scavenge Collector (neue Generation)
Enable -XX:+UseParallelOldGC Deaktivieren Sie -XX:-UseParallelOldGC //Die neue Generation verwendet die Funktion Parallel Scavenge. Die alte Generation verwendet den Parallel Old Collector
ParallelOl Garbage Collector (alte Generation)
enable -XX:+UseParallelGC Deaktivieren Sie -XX:-UseParallelGC //Die neue Generation verwendet die Funktion Parallel Scavenge. Die alte Generation verwendet den Parallel Old Collector
CMS Garbage Collector (alte Generation)
enable -XX:+UseConcMarkSweepGC Schalten Sie -XX:-UseConcMarkSweepGC
G1 Garbage Collector
Turn on -XX:+UseG1GC aus Deaktivieren Sie -XX:-UseG1GC
GC-Strategieparameterkonfiguration
GC-Pausenzeit. Der Garbage Collector wird versuchen, diese Zeit mit verschiedenen Mitteln zu erreichen, z. B. durch Reduzierung der jungen Generation
-XX: MaxGCPauseMillis
Der Anteil des belegten Heaps, der GC ausl?st, ist der Java-Heap-Belegungsschwellenwert, der den Markierungszyklus ausl?st. Die Standardbelegungsrate betr?gt 45 % des gesamten Java-Heaps
-XX:InitiatingHeapOccupancyPercent=n
Das gr??te Objekt, das die neue Generation aufnehmen kann, wird direkt der alten Generation zugewiesen . 0 bedeutet keine Begrenzung.
-XX:PretenureSizeThreshold=1000000 //
Geben Sie das Mindest-GC-Alter der alten Generation ein und konvertieren Sie die Objekte der jungen Generation in den Mindestalterwert der Objekte der alten Generation. Der Standardwert ist 7
-XX: InitialTenuringThreshol=7
Upgrade der alten Generation Alter, der Maximalwert betr?gt 15
-XX :MaxTenuringThreshold
Anzahl der parallelen GC-Ausführungsthreads
-XX:ParallelGCThreads=16
Deaktivieren Sie System.gc(), da diese Methode standardm??ig FGC ausl?st und ignoriert UseG1GC und UseConcMarkSweepGC in den Parametern, sodass Sie diese Methode bei Bedarf deaktivieren k?nnen.
-XX:-+DisableExplicitGC
Stellen Sie die Durchsatzgr??e ein, der Standardwert ist 99
XX:GCTimeRatio
Aktivieren Sie die adaptive Strategie, das Verh?ltnis jedes Bereichs und das Alter der Bef?rderung zur alten Generation und andere Parameter werden automatisch angepasst. Um ein Gleichgewicht zwischen Durchsatz und Pausenzeit zu erreichen.
XX:UseAdaptiveSizePolicy
Legen Sie den Prozentsatz der GC-Zeit fest, der von der Programmlaufzeit belegt wird
GCTimeRatio
Dump異??煺?/span>
-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
表示發(fā)生
OOM后
,運行jconsole.exe
程序。這里可以不用加“”,因為
jconsole.exe
路徑Program Files含有空格。利用這個參數,我們可以在系統(tǒng)OOM
后,自定義一個腳本,可以用來發(fā)送郵件告警信息,可以用來重啟系統(tǒng)等等。-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
。整個堆大小=年輕代大小 + 年老代大小 + 方法區(qū)大小
-Xss128k
設置每個線程的堆棧大小。
JDK1.5
以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統(tǒng)對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。
-XX:NewRatio=4
設置年輕代(包括Eden和兩個Survivor區(qū))與年老代的比值(除去持久代)。設置為4,則年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5 。
-XX:SurvivorRatio=4
設置年輕代中Eden區(qū)與Survivor區(qū)的大小比值。設置為4,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:4,一個Survivor區(qū)占整個年輕代的1/6
-XX:MaxPermSize=16m
設置持久代大小為16m。
-XX:MaxTenuringThreshold=0
設置垃圾最大年齡。如果設置為0的話,則年輕代對象不經過Survivor區(qū),直接進入年老代。對于年老代比較多的應用,可以提高效率。如果將此值設置為一個較大值,則年輕代對象會在Survivor區(qū)進行多次復制,這樣可以增加對象在年輕代的存活時間,增加在年輕代即被回收的概論。
項目中,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 記錄系統(tǒng)的GC時間 -XX:+PrintGCCause 產生GC的原因(默認開啟)項目中沒用過怎么辦?
對于很多沒用過的人來說,面試官問項目中這些參數是怎么用?此時,很容易選擇妥協(xié),傻傻的回答沒用過。
偷偷的告訴你,很多面試官也沒有用過。
另外,你可以自己搞個小項目,把
JVM
參數設置小點,使用測試工具JMeter
,多線程測試一下。
Das obige ist der detaillierte Inhalt vonMeituan-Interview: Mit welchen JVM-Tuning-Parametern bin ich vertraut?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)