1. 程式人生 > >【JVM】6、聊聊JVM常用參數設置

【JVM】6、聊聊JVM常用參數設置

閾值 policy 虛擬機棧 時間戳 ces 增加 action 垃圾 容易

整體考慮堆大小

-Xms3550m, 初始化堆大小。通常情況和-Xmx大小設置一樣,避免虛擬機頻繁自動計算後調整堆大小。
-Xmx3550m,最大堆大小。

考慮分代設置堆大小

首先通過jstat等工具查看應用程序正常情況下需要堆大小,再根據實際情況設置。

新生代

-xmn2g,新生代大小。Sun官方推薦配置為整個堆的3/8。
-XX:SurvivorRatio=8。Eden和Survivor的比值。

老年代

老年代=整個堆大小-新生代-永久代

永久代

-XX:Permsize=512m,設置永久代初始值。
-XX:MaxPermsize=512m,設置永久代的最大值。
註:Java8沒有永久代說法,它們被稱為元空間,-XX:MetaspaceSize=N

考慮本機直接內存

-XX:MaxDirectMemorySize=100M。默認與Java堆大最大值(-Xmx)

考慮虛擬機棧

每個線程池的堆棧大小。在jdk5以上的版本,每個線程堆棧大小為1m,jdk5以前的版本是每個線程池大小為256k。一般設置256k。
-Xss256K.

考慮選擇垃圾收集器

Serial收集器(串行收集器)

歷史最悠久的串行收集器。參數-XX:UseSerialGC。不太常用。

ParNew和ParOld收集器(並發收集器)

Serial的多線程版本收集器。

Parallel Scavenge(吞吐量優先垃圾收集器)

並行收集器,不同於多線程收集器ParNew,關註吞吐量的收集器。
-XX:MaxGCPauseMillis=10,設置垃圾收集停頓的最大毫秒數。
-XX:GCTimeRatio=49,垃圾收集器占比,默認是99。
-XX:+UseAdaptiveSeizPolicy,GC自適應調節策略。
-XX:+UseParallelGC,虛擬機Server模式默認值,使用Parallel Scavenge + Serial Old進行內存回收。
-XX:+UseParallelOldGC, 使用Parallel Scavenge + Parallel Old 進行內存回收。

CMS

CMS作為老年代收集器,不能與Parallel Scavenge並存。可能會有內存碎片問題。
-XX:+UserConcMarkSweepGC,新生代默認用ParNew收集。也可以用-XX:+UserParNewGC強制指定新生代用ParNew收集
-XX:ParallelGCThreads=4,設置垃圾收集線程數。默認是(CPU數量+3)/4。垃圾收集線程數不少於25%,當CPU數量小於4的時候影響大。
-XX:CMSInitiatingOccupancyFraction=80,老年代垃圾占比達到這個閾值開始CMS收集,1.6默認是92。設置過高容易導致並發收集失敗,會出現SerialOld收集的情況。
-XX:+UseCMSCompactAtFullCollection,在FULL GC的時候, 對年老代的壓縮增加這個參數是個好習慣。可能會影響性能,但是可以消除碎片。
-XX:CMSFullGCsBeforeCompaction=1,多少次後進行內存壓縮。
-XX:+CMSParallelRemarkEnabled, 為了減少第二次暫停的時間,開啟並行remark,降低標記停頓

G1(Garbage First)

-XX:+UseG1GC,謹慎使用,需要經過線上測試,還沒有被設置為默認垃圾收集器。
之前的垃圾收集器收集的範圍是新生代或者老年代,而G1垃圾收集器收集的範圍包括新生代和老年代整個堆。G1將Java堆劃為多個大小相同的獨立區域(Region),垃圾收集單位是Region。G1垃圾收集適合至少大於4G內存得系統。並且不會產生內存空間碎片。

其他參數

-XX:MaxTenuringThreshold=30,晉升老年代的年齡。
-XX:PretenureSizeThreshold=?,晉升老年代的對象大小。沒設置過。

考慮日誌打印

-verbose:gc,打印GC日誌
-XX:+PrintGC,打印GC基本日誌
-XX:+PrintGCDetails,打印GC詳細日誌
-XX:+PrintGCTimeStamps,打印相對時間戳
-XX:+PrintGCApplicationStoppedTime,打印垃圾回收期間程序暫停的時間
-XX:+PrintGCApplicationConcurrentTime,打印每次垃圾回收前,程序未中斷的執行時間
-XX:+PrintTenuringDistribution:查看每次minor GC後新的存活周期的閾值
-XX:+PrintTLAB,查看TLAB空間的使用情況
-Xloggc:filename,把相關日誌信息記錄到文件以便分析

考慮OOM(堆溢出)時保留現場日誌

當拋出OOM時進行heapdump

-XX:+HeapDumpOnOutOfMemoryError,JVM異常自動生成堆轉儲
-XX:HeapDumpPath=,堆轉儲文件名

轉自:http://blog.csdn.net/csujiangyu/article/details/52071473

【JVM】6、聊聊JVM常用參數設置