一.關於JVM參數配置,有多種途徑。
1.在tomcat中直接配置的
打開tomcat的安裝目錄, 在bin下修改catalina.bat文件
添加如下:
set "JAVA_OPTS=-Xmx300m -Xms300m -Xmn100m -XX:SurvivorRatio=8"
在這個位置:
啟動tomcat即可起作用。
2.使用Myecplise,配置JVM參數
雙擊Tomcat,打開在如下位置,配置:
-Xmx300m
-Xms300m
-Xmn100m
-XX:SurvivorRatio=8
在如下位置即可。
然后啟動項目,即可起作用。
二.標准配置:
-Xmx300m -Xms300m -Xmn100m -XX:SurvivorRatio=8 -XX:+UseG1GC -XX:MaxTenuringThreshold=14 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=8
-XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+TraceClassLoading -XX:+PrintClassHistogram
進行JVM的優化的這些參數
解釋如下:
-Xmx300m 最大堆大小 -Xms300m 初始堆大小 -Xmn100m 年輕代大小 -XX:SurvivorRatio=8 Eden區與Survivor區的大小比值,設置為8,則兩個Survivor區與一個Eden區的比值為2:8,一個Survivor區占整個年輕代的1/10 -XX:+UseG1GC 使用 G1 (Garbage First) 垃圾收集器 -XX:MaxTenuringThreshold=14 提升年老代的最大臨界值(tenuring threshold). 默認值為 15[每次GC,增加1歲,到15歲如果還要存活,放入Old區] -XX:ParallelGCThreads=8 設置垃圾收集器在並行階段使用的線程數[一般設置為本機CPU線程數相等,即本機同時可以處理的個數,設置過大也沒有用] -XX:ConcGCThreads=8 並發垃圾收集器使用的線程數量
-XX:+DisableExplicitGC 禁止在啟動期間顯式調用System.gc() -XX:+HeapDumpOnOutOfMemoryError OOM時導出堆到文件 -XX:HeapDumpPath=d:/a.dump 導出OOM的路徑 -XX:+PrintGCDetails 打印GC詳細信息 -XX:+PrintGCTimeStamps 打印CG發生的時間戳 -XX:+PrintHeapAtGC 每一次GC前和GC后,都打印堆信息 -XX:+TraceClassLoading 監控類的加載 -XX:+PrintClassHistogram 按下Ctrl+Break后,打印類的信息
三.我們把GC分成4種類型
1. SerialGC
參數-XX:+UseSerialGC
就是Young區和old區都使用serial 垃圾回收算法,
2. ParallelGC
參數-XX:+UseParallelGC
Young區:使用Parallel scavenge 回收算法
Old 區:可以使用單線程的或者Parallel 垃圾回收算法,由 -XX:+UseParallelOldGC 來控制
3. CMS
參數-XX:+UseConcMarkSweepGC
Young區:可以使用普通的或者parallel 垃圾回收算法,由參數 -XX:+UseParNewGC來控制
Old 區:只能使用Concurrent Mark Sweep
4. G1
參數:-XX:+UseG1GC
沒有young/old區
四.一些配置解釋
1.選項/默認值 說明
-XX:+UseG1GC 使用 G1 (Garbage First) 垃圾收集器
-XX:MaxGCPauseMillis=n 設置最大GC停頓時間(GC pause time)指標(target). 這是一個軟性指標(soft goal), JVM 會盡量去達成這個目標.
-XX:InitiatingHeapOccupancyPercent=n 啟動並發GC周期時的堆內存占用百分比. G1之類的垃圾收集器用它來觸發並發GC周期,基於整個堆的使用率,而不只是某一代內存的使用比. 值為 0 則表示"一直執行GC循環". 默認值為 45.
-XX:NewRatio=n 新生代與老生代(new/old generation)的大小比例(Ratio). 默認值為 2.
-XX:SurvivorRatio=n eden/survivor 空間大小的比例(Ratio). 默認值為 8.
-XX:MaxTenuringThreshold=n 提升年老代的最大臨界值(tenuring threshold). 默認值為 15.
-XX:ParallelGCThreads=n 設置垃圾收集器在並行階段使用的線程數,默認值隨JVM運行的平台不同而不同.
-XX:ConcGCThreads=n 並發垃圾收集器使用的線程數量. 默認值隨JVM運行的平台不同而不同.
-XX:G1ReservePercent=n 設置堆內存保留為假天花板的總量,以降低提升失敗的可能性. 默認值是 10.
-XX:G1HeapRegionSize=n 使用G1時Java堆會被分為大小統一的的區(region)。此參數可以指定每個heap區的大小. 默認值將根據 heap size 算出最優解. 最小值為 1Mb, 最大值為 32Mb.
2.JVM堆大小的默認最大和最小值(參考)
操作系統及JVM類型 | 初始堆的大小(Xms) | 最大堆的大小(Xmx) |
Linux/Solaris,32位客戶端 | 16MB | 256MB |
Linux/Solaris,32位服務器 | 64MB | 取1GB和物理內存大小1/4二者中的最小值 |
Linux/Solaris,64位服務器 | 取512MB和物理內存大小1/64二者中的最小值 | 取32GB和物理內存大小1/4二者中的最小值 |
MacOS,64位服務器型JVM | 64MB | 取1GB和物理內存大小1/4二者中的最小值 |
32位Window系統,客戶端型JVM | 16MB | 256MB |
64位Window系統,客戶端型JVM | 64MB | 1GB和物理內存大小1/4二者中的最小值 |
3.一般性調優辦法
-Xmx 和-Xms 一般設置為一樣大小,這樣能稍微提高GC的運行效率,因為他/她不再需要估算堆是否需要調整大小了
JVM參數配置報錯:
1.Conflicting collector combinations in option list; please refer to the release notes for the combina
報錯:使用多種GC導致GC沖突
參考資料:
http://blog.csdn.net/mr__fang/article/details/47723767
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html