jvm引數配置

alexanderkenndy發表於2014-04-09
JVM引數說明與配置

引數名與引數說明
-server 啟用能夠執行優化的編譯器, 顯著提高伺服器的效能,但使用能夠執行 優化的編譯器時,伺服器的預備時間將會較長。生產環境的伺服器強烈推薦設定 此引數。

-Xss 單個執行緒堆疊大小值;JDK5.0 以後每個執行緒堆疊大小為1M,以前每個執行緒堆疊大小為256K。在相同實體記憶體下,減小這個值能生成更多的執行緒。但是作業系統對一個程式內的執行緒數還是有限制的,不能無限生成,經驗值在 3000~5000 左右。

-XX:+UseParNewGC 用來設定年輕代為併發收集【多CPU】,如果你的伺服器 有多個CPU,你可以開啟此引數;開啟此引數,多個CPU 可併發進行垃圾回收,可提高垃圾回收的速度。此引數和+UseParallelGC,-XX:ParallelGCThreads 搭配使用。

+UseParallelGC 選擇垃圾收集器為並行收集器。此配置僅對年輕代有效。即上述配置下,年輕代使用併發收集,而年老代仍舊使用序列收集。可提高系統的吞吐量。

-XX:ParallelGCThreads :年輕代並行垃圾收集的前提下(對併發也有效果)的執行緒數,增加並行度,即:同時多少個執行緒一起進行垃圾回收。此值最好配置與處理器數目相等。


永久儲存區相關引數:
引數名引數說明
-Xnoclassgc 每次永久儲存區滿了後一般GC 演算法在做擴充套件分配記憶體前都會觸發一次FULL GC,除非設定了-Xnoclassgc。

-XX:PermSize 應用伺服器啟動時,永久儲存區的初始記憶體大小。

-XX:MaxPermSize 應用執行中,永久儲存區的極限值。為了不消耗擴大JVM 永久儲存區分配的開銷,將此引數和-XX:PermSize 這個兩個值設為相等。


堆空間相關引數
引數名引數說明
-Xms 啟動應用時,JVM 堆空間的初始大小值。

-Xmx 應用執行中,JVM 堆空間的極限值。為了不消耗擴大JVM 堆控制元件分配的開銷,將此引數和-Xms 這個兩個值設為相等,考慮到需要開執行緒,講此值設定為總記憶體的80%。

-Xmn 此引數硬性規定堆空間的新生代空間大小,推薦設為堆空間大小的1/4。

上面所列的JVM 引數關係到系統的效能,而其中-XX:PermSize,-XX:MaxPermSize,
-Xms,-Xmx 和-Xmn 這5 個引數更是直接關係到系統的效能, 系統是否會出現記憶體溢位。
-XX:PermSize 和-XX:MaxPermSize 分別設定應用伺服器啟動時,永久儲存區的初始大小和極限大小;在生成環境中強烈推薦將這個兩個值設定為相同的值,以避免分配永久儲存區的開銷,具體的值可取系統“疲勞測試”獲取到的永久儲存區的極限值;如果不進行設定
-XX:MaxPermSize 預設值為64M,一般來說系統的類定義檔案大小都會超過這個預設值。
-Xms 和-Xmx 分別是伺服器啟動時,堆空間的初始大小和極限值。-Xms 的預設值是實體記憶體的1/64 但小於1G,-Xmx 的預設值是實體記憶體的1/4 但小於1G.在生產環境中這些預設值是肯定不能滿足我們的需要的。也就是你的伺服器有8g 的記憶體,不對JVM 引數進行設定優化,應用伺服器啟動時還是按預設值來分配和約束JVM 對記憶體資源的使用,不會充分的利用所有的記憶體資源。

到此我們就不難理解上文提到的“我的伺服器有8g 記憶體,系統也就100M 左右,居然出現記憶體溢位”這個“怪現象”了。在上文我曾提到“永久儲存區溢(java.lang.OutOfMemoryError: Java Permanent Space)”和“JVM 堆空間溢位(java.lang.OutOfMemoryError: Java heap space)”這兩種溢位錯誤。現在大家都知道答案了:“永久儲存區溢位(java.lang.OutOfMemoryError: Java Permanent Space)”乃是永久儲存區設定太小,不能滿足系統需要的大小,此時只需要調整-XX:PermSize 和-XX:MaxPermSize 這兩個引數即可。“JVM 堆空間溢位(java.lang.OutOfMemoryError: Java heap space)”錯誤是JVM 堆空間 不足,此時只需要調整-Xms 和-Xmx 這兩個引數即可。

相關文章