【JVM】調優筆記3-----JVM參數配置 JDK1.8


一.關於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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM