JVM參數交流平臺,小程序--> JVMPocket
-
Trace跟蹤參數
參數 | 說明 |
---|---|
-verbose:gc -XX:+printGC |
可以打印GC的簡要信息 [GC 4790K->374K(15872K), 0.0001606 secs] |
-XX:+PrintGCDetails | 打印GC詳細信息 |
-XX:+PrintGCTimeStamps | 打印CG發生的時間戳 例: [GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374K(15872K), 0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] |
-Xloggc:log/gc.log | 指定GC log的位置,以文件輸出 |
-XX:+PrintHeapAtGC | 每次一次GC后,都打印堆信息 |
-XX:+TraceClassLoading | [Loaded java.lang.Object from shared objects file] [Loaded java.io.Serializable from shared objects file] [Loaded java.lang.Comparable from shared objects file] [Loaded java.lang.CharSequence from shared objects file] [Loaded java.lang.String from shared objects file] [Loaded java.lang.reflect.GenericDeclaration from shared objects file] [Loaded java.lang.reflect.Type from shared objects file] |
-Xmx –Xms | 指定最大堆和最小堆,Java會盡可能維持在最小堆 |
-Xmn | 設置新生代大小 |
-XX:NewRatio | 新生代(eden+2*s)和老年代(不包含永久區)的比值 4 表示 新生代:老年代=1:4,即年輕代占堆的1/5 |
-XX:SurvivorRatio | 設置兩個Survivor區和eden的比 8表示 兩個Survivor :eden=2:8,即一個Survivor占年輕代的1/10 |
-
堆的分配參數
參數 | 說明 |
---|---|
-XX:+HeapDumpOnOutOfMemoryError | OOM時導出堆到文件 |
-XX:HeapDumpPath=c:/a.dump | 導出OOM的路徑 |
-XX:OnOutOfMemoryError | 在OOM時,執行一個腳本 -XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p 當程序OOM時,在D:/a.txt中將會生成線程的dump,可以在OOM時,發送郵件,甚至是重啟程序 |
-XX:PermSize -XX:MaxPermSize | 設置永久區的初始空間和最大空間,他們決定一個系統可以容納多少個類型 |
官方推薦新生代占堆的3/8
幸存代占新生代的1/10
在OOM時,記得Dump出堆,確保可以排查現場問題
-
棧的分配參數
參數 | 說明 |
---|---|
-Xss | 通常只有幾百K,決定了函數調用的深度,每個線程都有獨立的棧空間,局部變量、參數 分配在棧上 |
JAVA_OPTS="-server -Xms4g -Xmx4g -Xmn2500m -Xss1024K -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70"