天天看點

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

作者:大資料架構師

大頁和NUMA參數

本節介紹JVM為使用OS而提供的大頁和NUMA特性相關的參數。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數控制JVM向OS請求記憶體時使用大頁的粒度。使用該參數時需要對OS進行配置,隻有OS允許時才能真正啟動。參數的預設值與平台相關,一般為false。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

在允許使用大頁方式向OS請求記憶體時,如果堆空間小于該門檻值,則強制禁止大頁使用。該參數的預設值為128MB。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

在允許使用大頁方式向OS請求記憶體時,優先在本地節點進行配置設定。該參數僅适用于Windows系統。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

在允許使用大頁方式向OS請求記憶體時,如果OS提供了多種大頁的設定,可通過該參數選擇其中的大頁設定。參數的預設值為0,表示使用OS預設的大頁設定。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數控制在Mutator配置設定記憶體時JVM優先從本地節點進行配置設定。參數的預設值為false。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

當使用NUMA配置設定時,使用Interleave的方式在每個NUMA節點配置設定記憶體。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

當使用NUMA配置設定時,使用Interleave的方式在每個NUMA節點配置設定記憶體,可使用該參數控制每次配置設定的記憶體量。參數的預設值為2MB,僅适用于Windows系統。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

當使用NUMA配置設定時,使用參數UseAdaptiveNUMAChunkSizing允許自動調整多個NUMA節點管理的記憶體量。參數的預設值為true。

在自動調整每個NUMA時,可使用曆史資料對未來使用的記憶體進行預測。

參數NUMA-ChunkResizeWeight控制最新的資料對于預測值的貢獻,預設值為20,表示最新資料對于預測值的貢獻為20%。

參數NUMAPageScanRate控制NUMA節點調整時一次最多處理的頁面數,預設值為256,該參數的功能需要OS支援。

參數NUMASpaceResizeRate控制NUMA節點調整時一次最大調整的記憶體量,預設值為1GB,表示一次最大調整1GB記憶體。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

當使用NUMA配置設定時,控制輸出NUMA的狀态資訊。參數的預設值為false。

GC日志相關參數

本節介紹GC日志輸出的相關參數。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數列印JVM中GC相關的日志資訊,預設值為false,表示不列印。在JDK 9中被丢棄,等價于-Xlog:gc。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數列印JVM中GC詳細的日志資訊,預設值為false,表示不列印。在JDK 9中被丢棄,等價于-Xlog:gc*。

其他參數

本節介紹一些GC周邊功能的參數,如中繼資料、字元串回收等設定。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

AggressiveHeap是JVM早期調優參數之一,會檢測主機的實體記憶體大小(不會使用MaxRAM),然後調整相關的參數,使得長時間運作的、記憶體申請密集的任務能夠以最佳狀态運作。

它是早期JVM提供的記憶體優化打包方案,目前已經不推薦使用。使用AggressiveHeap的條件是記憶體大于256MB。使用該參數後,下面的參數将被設定:

1)MaxHeapSize,如果記憶體大于320MB,則MaxHeapSize為記憶體的一半;

如果記憶體小于320MB,則MaxHeapSize為記憶體減去160MB。

2)InitialHeapSize、MinHeapSize,與上面最大堆空間相同。

3)NewSize,為最大堆空間的3/8,即

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

4)MaxNewSize,與NewSize相同。

5)UseLargePages,除BSD和AIX系統外,其他系統都強制使用大頁,參數設定為true。

6)ResizeTLAB,禁止TLAB大小的變化,設定為false。

7)TLABSize,大小為256KB。

8)YoungPLABSize,大小為256KB。

9)OldPLABSize,大小為8KB。

10)UseParallelGC,設定為true,使用Parallel GC回收。

11)ThresholdTolerance,減少Parallel GC中對象晉升門檻值的變化。設定為100,表示當新生代或者老生代所用的時間是對方的2倍時,增大或者減小晉升的門檻值。

12)ScavengeBeforeFullGC,設定為false,不允許在執行Full GC或者CMS的再标記階段前執行Minor GC。

13)BindGCTaskThreadsToCPUs(僅JDK 8和JDK 11中),強制開啟線程和CPU的綁定,參數設定為true,隻在Solaris平台上有用。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數用于在CMS中對BOT結構中未配置設定空間的起始位址進行設定。如果設定該參數,在計算使用記憶體時會更加準确,在尋找sweep的截止點時也更加準确,否則使用空閑空間(Free空間)的end作為結束點(可能會多計算一些尚未使用的空間)。該參數的預設值為false。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數用于驗證BOT中記錄的對象位址是否正确(正确是指BOT指向的位址是一個對象)。預設值為true,表示允許驗證。該參數需要配合其他的驗證參數(如VerifyBeforeGC、VerifyAfterGC)使用,僅适用于ParallelGC、CMS。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

以上參數輸出線程無法進入安全點的資訊。參數SafepointTimeout為true時,線程經過一定時間後(由參數SafepointTimeoutDelay控制)無法進入安全點,将輸出資訊。參數SafepointTimeout的預設值為false,表示不輸出;參數SafepointTimeoutDelay的預設值為10 000,表示線程10秒無法進入安全點時才會輸出資訊。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數在垃圾回收時執行類解除安裝,參數的預設值為true,表示進行類解除安裝。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數在垃圾回收時并發執行類解除安裝,參數的預設值為true,僅适用于存在并發标記的垃圾回收。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數控制Java軟引用對象的存活時間,根據空閑記憶體的大小計算存活時間。參數的預設值為1000,表示每增加1MB空間,軟引用多存活1秒。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

在進行垃圾回收後可以擴充記憶體,由該參數控制每次擴充記憶體的最小量。在32位系統中參數的預設值為128KB,表示一次至少可以擴充128KB的記憶體。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

這兩個參數分别表示中繼資料空間的最初大小和最大大小。在32位系統中,參數Metas-paceSize的預設值為16MB,在64位系統中,參數MetaspaceSize的預設值為21MB。參數MaxMetaspaceSize如果沒有設定,則會根據不同的回收政策得到不同的值。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

該參數表示中繼資料空間的回收政策,有3種選擇:balanced、aggressive和none,參數的預設值為balanced。不同政策的記憶體粒度和回收方式略有不同。主要差別如下。

1)none:不回收中繼資料空間,配置設定粒度為64KB,配置設定時每次都請求64KB的記憶體。

2)aggressive:回收中繼資料空間,配置設定粒度為16KB,配置設定時可以重用空間。

3)balanced:回收中繼資料空間,配置設定粒度為64KB,配置設定時可以重用空間。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

在垃圾回收結束後,可以動态調整中繼資料空間的大小,當記憶體使用高于一定的比例時會擴充記憶體,當記憶體使用低于一定的比例時會收縮記憶體。參數MinMetaspaceFreeRatio表示回收後空閑中繼資料空間至少超過該門檻值,參數的預設值為40,表示期望回收後空閑中繼資料空間預留占40%,不足40%時會擴充記憶體;參數MaxMetaspaceFreeRatio表示回收後空閑中繼資料空間至多達到該門檻值,參數的預設值為70,表示期望回收後空閑中繼資料空間最多預留占70%,超過的部分記憶體被收縮。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

在垃圾回收後可以擴充中繼資料空間,該參數控制每次擴充的記憶體量。在32位系統中參數MinMetaspaceExpansion的預設值為256KB。參數MaxMetaspaceExpansion的預設值為4MB,表示一次擴充的記憶體量小于256KB則擴充至256KB,擴充量為256KB~4MB,則擴充至4MB,擴充量大于4MB,則擴充實際數量再加上256KB。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

這兩個參數表示JVM内部hash table的大小,StringTableSize用于表示緩存字元串的個數,SymbolTableSize用于緩存符号對象的個數。在32位系統中兩個參數的預設值均為1024,在64位系統中兩個參數的預設值均為65536。

JVM中垃圾回收相關參數介紹:大頁和NUMA參數+GC日志相關參數

本篇文章給大家講解的内容是JVM中垃圾回收相關參數介紹:GC通用參數,GC生産參數,大頁和NUMA參數+GC日志相關參數+其他參數

  1. 下篇文章給大家講解的内容是JVM中垃圾回收相關參數介紹:GC實驗參數
  2. 感謝大家的支援!

繼續閱讀