1. 程式人生 > >JVM調優及引數設定

JVM調優及引數設定

(1)引數

-Xms:初始堆大小

-Xmx :最大堆大小 此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體

-Xmn :年輕代大小 整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代後,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8

-XX:NewSize:設定年輕代大小

-XX:MaxNewSize:年輕代最大值

-XX:NewRatio 年老代與年輕代的比值

-XX:SurvivorRatio:設定年輕代中Eden區與Survivor區的大小比值

-XX:MaxTenuringThreshold

設定垃圾最大年齡。如果設定為0的話,則年輕代物件不經過Survivor區,直接進入年老代。對於年老代比較多的應用,可以提高效率。如果將此值設定為一個較大值,則年輕代物件會在Survivor區進行多次複製,這樣可以增加物件年輕代的存活時間,增加在年輕代即被回收的概論。

-XX:PermSize:設定持久帶

-XX:MaxPermSize設定持久代最大值

2)調優

JVM調優主要是針對記憶體管理方面的調優,包括控制各個代的大小,GC策略。由於GC開始垃圾回收時會掛起應用執行緒,嚴重影響了效能,調優的目是為了儘量降低GC所導致的應用執行緒暫停時間、 減少Full GC次數

關鍵引數-Xms -Xmx

-Xmn -XX:SurvivorRatio-XX:MaxTenuringThreshold-XX:PermSize-XX:MaxPermSize

1-Xms -Xmx 通常設定為相同的值,避免執行時要不斷擴充套件JVM記憶體,這個值決定了JVM heap所能使用的最大記憶體。

2-Xmn 決定了新生代空間的大小,新生代EdenS0S1三個區域的比率可以通過-XX:SurvivorRatio來控制(假如值為 4  表示:Eden:S0:S1 = 4:3:3 )

3-XX:MaxTenuringThreshold 控制物件在經過多少次minor GC之後進入老年代,此引數只有在

Serial 序列GC時有效。

4-XX:PermSize-XX:MaxPermSize 用來控制方法區的大小,通常設定為相同的值。

(1)代調優

   合理設定新生代大小

    1避免新生代大小設定過小

當新生代設定過小時,會產生兩種比較明顯的現象,一是minor GC次數頻繁,二是可能導致 minor GC物件直接進入老年代。當老年代記憶體不足時,會觸發Full GC

    2)避免新生代設定過大

新生代設定過大,會帶來兩個問題:一是老年大變小,可能導致Full  GC頻繁執行;二是 minor GC 執行回收的時間大幅度增加。

年輕代大小選擇

響應時間優先的應用:儘可能設大,直到接近系統的最低響應時間限制(根據實際情況選擇)。在此種情況下,年輕代收集發生的頻率也是最小的。同時,減少到達年老代的物件。

吞吐量優先的應用:儘可能的設定大,可能到達Gbit的程度。因為對響應時間沒有要求,垃圾收集可以並行進行,一般適合8CPU以上的應用。

年老代大小選擇

響應時間優先的應用:年老代使用併發收集器,所以其大小需要小心設定,一般要考慮併發會話率和會話持續時間等一些引數。如果堆設定小了,可以會造成記憶體碎片、高回收頻率以及應用暫停而使用傳統的標記清除方式;如果堆大了,則需要較長的收集時間。最優化的方案,一般需要參考以下資料獲得:

併發垃圾收集資訊

持久代併發收集次數

傳統GC資訊

花在年輕代和年老代回收上的時間比例

減少年輕代和年老代花費的時間,一般會提高應用的效率

吞吐量優先的應用:一般吞吐量優先的應用都有一個很大的年輕代和一個較小的年老代。原因是,這樣可以儘可能回收掉大部分短期物件,減少中期的物件,而年老代盡存放長期存活物件。

    合理設定Survivor

  -XX:SurvivorRatio引數的值越大,就意味著Eden區域變大,minor GC次數會降低,但兩塊Survivor區域變小,如果超過Survivor區域記憶體大小的物件在minor GC後仍沒被回收,則會直接進入老年代,

-XX:SurvivorRatio引數值設定過小,就意味著Eden區域變小,minor GC觸發次數會增加,Survivor區域變大,意味著可以儲存更多在minor GC後任存活的物件,避免其進入老年代。

  合理設定物件在新生代的存活時間

新生代存活週期的值決定了新生代物件在經過多少次Minor GC後進入老年代。因此這個值要根據自己的應用來調優,Jvm引數上這個值對應的為-XX:MaxTenuringThreshold,預設值為15次。

 初始堆大小和最大堆大小相同

-XX:PermSize-XX:MaxPermSize 用來控制方法區的大小,通常設定為相同的值。避免執行時要不斷擴充套件JVM記憶體,這個值決定了JVM heap所能使用的最大記憶體。

較小堆引起的碎片問題

因為年老代的併發收集器使用標記、清除演算法,所以不會對堆進行壓縮。當收集器回收時,他會把相鄰的空間進行合併,這樣可以分配給較大的物件。但是,當堆空間較小時,執行一段時間以後,就會出現“碎片”,如果併發收集器找不到足夠的空間,那麼併發收集器將會停止,然後使用傳統的標記、清除方式進行回收。如果出現“碎片”,可能需要進行如下配置:

-XX:+UseCMSCompactAtFullCollection:使用併發收集器時,開啟對年老代的壓縮。

-XX:CMSFullGCsBeforeCompaction=0:上面配置開啟的情況下,這裡設定多少次Full GC後,對年老代進行壓縮

2GC策略調優

(1)合理選擇垃圾收集器的搭配使用

(2)使用視覺化工具JConsole檢視JVM引數

JConsole工具在JDK/bin目錄下,啟動JConsole後,將自動搜尋本機執行的jvm程序,不需要jps命令來查詢指定。雙擊其中一個jvm程序即可開始監控,也可使用“遠端程序”來連線遠端伺服器。

相關推薦

JVM調引數設定

(1)引數 -Xms:初始堆大小 -Xmx :最大堆大小 此值可以設定與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配記憶體 -Xmn :年輕代大小 整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代後,將會減小年老代大

JVM調常用引數設定JMX引數設定監控

JVM常用引數設定 JVM堆空間佈局  堆設定            -Xms:初始堆大小,避免垃圾回收之後,JVM調整,一般和Xmx設定一樣大            -Xmx:最大堆大小            -Xmn :  年輕代大小,整個堆大小=年輕代大小

JVM調 GC收集器

根據Java GC收集器具體分類,我們可以看出JVM根據需求不同提供了三種選擇:序列收集器、並行收集器、併發收集器。   序列收集器只適用於小資料量的情況,我們主要了解一下並行收集器和併發收集器。預設情況下,JDK5.0以前都是使用序列收集器,如果需要使用其他收集器需要在啟動的是時候加入相應的引

JVM調手冊之六:JVM引數設定分析

不管是YGC還是Full GC,GC過程中都會對導致程式執行中中斷,正確的選擇不同的GC策略,調整JVM、GC的引數,可以極大的減少由於GC工作,而導致的程式執行中斷方面的問題,進而適當的提高Java程式的工作效率。但是調整GC是以個極為複雜的過程,由於各個程式

JVM調之Tomcat啟動引數配置詳解

開發專案中會遇到Tomcat記憶體溢位(java.lang.OutOfMemoryError: PermGen space)的問題,通過查詢資料找到是通過設定Tomcat 啟動堆空間大小、年輕代大小、每個執行緒大小引數進行調優的,具體如下: 一、在Tomcat 啟動指令碼(

JVM調引數簡介、調目標調經驗

一、JVM調優引數簡介1、 JVM引數簡介-XX 引數被稱為不穩定引數,之所以這麼叫是因為此類引數的設定很容易引起JVM 效能上的差異,使JVM 存在極大的不穩定性。如果此類引數設定合理將大大提高JVM 的效能及穩定性。不穩定引數語法規則:1.布林型別引數值        -

Tomcat 調 JVM 引數優化

Tomcat 的預設配置是不能穩定長期執行的,也就是不適合生產環境,它會宕機,讓你不斷重新啟動,甚至在午夜時分喚醒你。對於作業系統優化來說,是儘可能的增大可使用的記憶體容量、提高CPU 的頻率,保證檔案系統的讀寫速率等。經過壓力測試驗證,在併發連線很多的情況下,CPU 的

JVM 基本引數使用與調JVM分析工具初探

一、JVM引數型別jvm引數型別一般包含以下三種類型:標準引數、X引數和XX引數。1.1引數型別說明1.1.1標準引數功能和輸出已經穩定得,在未來的JVM版本中不會修改的引數。圖1.jvm標準引數列表1.1.2 X引數非標準化引數 在未來的版本可能會改變 所有的引數都用-X開

Tomcat調JVM引數優化

        為了提升效能,首先就要對程式碼進行動靜分離,讓 Tomcat 只負責 jsp 檔案的解析工作。如採用 Apache 和 Tomcat 的整合方式,他們之間的連線方案有三種選擇,JK、http_proxy 和 ajp_proxy。相對於 JK 的連線方式,後兩種在配置上比較簡單的,靈活性方面也一

JVM調之Tomcat啟動參數配置詳解

.bat xms 是否 大堆 pts 啟動參數 spa java permgen 開發項目中會遇到Tomcat內存溢出(java.lang.OutOfMemoryError: PermGen space)的問題,通過查找資料找到是通過設置

JVM調(二)JVM記憶體分配引數

設定最大堆記憶體 -Xmx引數指定。最大堆是新生代和老年代的大小之和的最大值,他是java應用程式的堆上限。 使用-Xmx可以設定系統的最大堆。 設定最小堆記憶體 使用-Xms可以設定系統的最小堆空間,也就是jvm啟動時,所佔據的作業系統的記憶體大小。 設定新生代

JVM調(6)之引數配置

引數配置 堆大小設定 年輕代的設定很關鍵 JVM中最大堆大小有三方面限制: 相關作業系統的資料模型(32-bt還是64-bit)限制; 系統的可用虛擬記憶體限制; 系統的可用實體記憶體限制。 32位系統下,一般限制在1.5G~2G;64為

最簡單的方法修改JVM調的執行引數

前言: Java的專案執行在jvm裡面,預設配置是256/512m的初始化堆記憶體大小。有時候專案比較大的話,就需要配置一下JVM的相關引數,也算是JVM的部分調優了。 配置JVM虛擬機器的引數來進行專案調優,主要有兩個情景。 1、在Linux下配置tomcat,在執行時通過tomcat去載

JVM調總結系列文章彙總

1、一篇總結: JVM調優總結(這個總結得比較全面) 補充調優原則(未經驗證,請勿輕信!!!): 響應時間優先:GC發生(年輕代eden區空間不足時)的時間比較短,頻率比較低,也就是減少因GC引起的停頓時間和次數 tomcat執行引數配置:堆記憶體設定為固定的較大記憶體,即Xms

JVM調之常用引數配置

一、堆設定 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:設定年輕代大小 -XX:NewRatio=n:設定年輕代和年老代的比值。如:為3,表示年輕代與年老代比值為1:3,年輕代佔整個年輕代年老代和的1/4 -XX:SurvivorRatio=n:年輕代中Eden區與

Tomcat 調 JVM 參數優化

error: 收集 permgen object 上傳 服務器軟件 其他 判斷 系統內存 Tomcat 的缺省配置是不能穩定長期運行的,也就是不適合生產環境,它會死機,讓你不斷重新啟動,甚至在午夜時分喚醒你。對於操作系統優化來說,是盡可能的增大可使用的內存容量、提高CPU

JVM調大全實戰總結

文章目錄 JVM 型別 JVM 記憶體中的概念及分割槽 在JDK6及之前的版本 JDK7及之後的版本 為什麼叫Hot Spot? 效能調優的程式 效能調優的

JVM(JAVA虛擬機器)調原理

堆記憶體設定 原理 JVM堆記憶體分為2塊:Permanent Space 和 Heap Space。 Permanent 即 持久代(Permanent Generation),主要存放的是Java類定義資訊,與垃圾收集器要收集的Java物件關係不大。Heap

《java performance》翻譯 第七章jvm調:堆記憶體設定

    設定jvm堆記憶體     到目前為止,還沒有為調優jvm的記憶體佔用採取任何調優動作。下面這個步驟講述瞭如何來確定一個應用應該使用的jvm記憶體大小。這個步驟的目標是幫助調優人員找出應用的常駐記憶體大小,因為應用的常駐記憶體大小為配置應用的堆記憶體提供了很好的參考

JVM調引數彙總啊!!!!總結的很不錯。

-XX:PrintHeapAtGC:列印GC前後的詳細堆疊資訊 輸出形式: 34.702: [GC {Heap before gc invocations=7:  def new generation   total 55296K, used 52568K [0x1ebd0000, 0x227d0000, 0