JVM最佳化配置

xz43發表於2023-11-08

一、JVM基礎引數配置

-Xms            初始堆大小[預設實體記憶體的1/64]

-Xmx            最大堆大小[預設實體記憶體的1/4] 

-Xmn            年輕代大小(1.4or lator)

-XX:NewSize     設定年輕代大小(for 1.3/1.4)    

-XX:MaxNewSize  年輕代最大值(for 1.3/1.4)    

-XX:PermSize    設定持久代(perm gen)初始值[預設實體記憶體的1/64]  

-XX:MaxPermSize 設定持久代最大值[預設實體記憶體的1/4]  

-Xss            每個執行緒的堆疊大小[JDK5.0以後每個執行緒堆疊大小為1M,以前每個執行緒堆疊大小為256K]

-XX:ThreadStackSize         執行緒堆疊大小(0表示使用預設堆疊大小)

-XX:NewRatio                年輕代與年老代的比值  -XX:NewRatio=4表示年輕代與年老代所佔比值為1:4設定了Xmn的情況下,該引數不需要進行設定。

-XX:SurvivorRatio           Eden區與Survivor區的大小比值[預設8 8:1:1]

-XX:LargePageSizeInBytes    記憶體頁的大小不可設定過大, 會影響Perm的大小=128m

-XX:+UseFastAccessorMethods 原始型別的快速最佳化    

-XX:+DisableExplicitGC      關閉System.gc()

-XX:MaxTenuringThreshold    垃圾最大年齡[預設15]如果設定為0的話,則年輕代物件不經過Survivor區,直接進入年老代. 

-XX:+AggressiveOpts         加快編譯    

-XX:+UseBiasedLocking       鎖機制的效能改善    

-Xnoclassgc                 禁用垃圾回收    

-XX:SoftRefLRUPolicyMSPerMB 每兆堆空閒空間中SoftReference的存活時間[預設1s]

-XX:PretenureSizeThreshold  物件超過多大是直接在舊生代分配

-XX:TLABWasteTargetPercent  TLAB佔eden區的百分比[預設1% ]   

-XX:+CollectGen0First       FullGC時是否先YGC[預設false] 


二、垃圾回收器的選取

2.1 單核測試環境

‐XX:+UseSerialGC        開啟 Serial 收集器

‐XX:+UseSerialOldGC     開啟 SerialOld 收集器

2.2 吞吐量優先

-XX:+UseParallelGC       開啟 ParallelScavenge 收集器

XX:+UseParalledlOldGC    開啟 ParallelOld      收集器

‐XX:ParallelGCThreads    設定GC工作的執行緒數量[同樣使用於CMS]

2.3 響應速度優先

-XX:+UseParNewGC               開啟 ParNew 收集器

-XX:+UseConcMarkSweepGC        開啟 CMS 收集器

‐XX:+UseCMSCompactAtFullCollection   開啟空間壓縮(處理空間碎片)

‐XX:ConcGCThreads                    設定併發的FullGC執行緒數[(ParallelGCThreads+3)/4 ParallelGCThreads 預設=cpu核心數量]

‐XX:CMSFullGCsBeforeCompaction       設定空間壓縮的頻次[預設0,每次FullGC後都會壓縮一次]

‐XX:CMSInitiatingOccupancyFraction   設定FullGC觸發閾值[1.6+預設是92,之前62]

‐XX:+UseCMSInitiatingOccupancyOnly   只使用設定的回收閾值(‐XX:CMSInitiatingOccupancyFraction設定的值),如果不指定,JVM僅在第一次使用設定值,後續則會自動調整

‐XX:+CMSScavengeBeforeRemark         在CMS GC前啟動一次MinorGC,目的在於減少老年代對年輕代的引用,降低CMS GC的標記階段時的開銷,一般CMS的GC耗時80%都在remark階段

或者


‐XX:+UseG1GC              開啟G1收集器

‐XX:G1HeapRegionSize      設定分割槽大小(1MB~32MB,必須是2的冪,預設分為2048個分割槽)

‐XX:MaxGCPauseMillis      設定目標暫停時間(預設200ms)

‐XX:G1NewSizePercent      設定新生代記憶體初始空間(預設整堆5%)

‐XX:G1MaxNewSizePercen    設定新生代記憶體最大空間

‐XX:TargetSurvivorRatio   設定Survivor區的填充容量(預設50%,當年輕代空間被佔用超過50%,則將物件根據年齡由小到大累加,當累加物件空間佔用達到50%時將大於等於此年齡的物件轉移到老年代)

‐XX:InitiatingHeapOccupancyPercent    設定混合回收觸發閥值(預設45%,設定老年代佔用空間達到整堆記憶體閾值)

‐XX:G1HeapWastePercent                設定停止預設region回收閥值(預設5%,空閒出來的Region數量達到了堆記憶體的5%停止回收)。

‐XX:G1MixedGCLiveThresholdPercent     設定region回收閥值(預設85%,存活物件低於這個值時才會回收)

‐XX:G1MixedGCCountTarget              設定賽選回收次數(預設8次)


三、開啟GC日誌

‐XX:+PrintGCDetails     列印GC日誌

‐XX:+PrintGCTimeStamps  列印GC時間

‐XX:+PrintGCDateStamps  列印GC日期

‐Xloggc                 將GC日誌儲存為檔案,比如‐Xloggc:./gc.log


四、開啟TLAB

-XX: +UseTLAB


五、關閉逃逸分析

-XX:-DoEscapeAnalysis

 

六、Jvm 監控

javap      java位元組碼資訊檢視工具

jps        java虛擬機器程式資訊工具

jinfo      java虛擬機器程式配置資訊工具

jstat      java虛擬機器程式統計資訊監控工具

jstack     java虛擬機器程式堆疊跟蹤工具, 製作執行緒Dump

jmap       java虛擬機器程式堆記憶體對映,製作堆Dump

jconsole   用於提供JVM活動的圖形化檢視,包括執行緒的使用、類的使用和GC活動.

jvisualvm  監控JVM的GUI工具,可用來剖析執行的應用,分析JVM堆轉儲.


七、Linux監控命令

top     實時顯示正在執行程式的 CPU 使用率、記憶體使用率以及系統負載等資訊

vmstat 對作業系統的虛擬記憶體、程式、CPU活動進行監控

pidstat 監控指定程式的上下文切換

iostat 監控磁碟IO

free    記憶體使用情況

df      磁碟使用情況

第三方監控工具 MAT、GChisto、JProfiler、Arthas。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-2993410/,如需轉載,請註明出處,否則將追究法律責任。

相關文章