2014年7月8日 星期二

JVM配置參數定義


一般測試 JVM 最大可用記憶體 可用此command
【java -Xmx***m -XX:PermSize=***m -version】
如果有超過 JVM 最大可用記憶體,則會有錯誤log,
如果正常,則是正常顯示JAVA相關資訊。
若是測試安裝於不同版本(不同目錄)的JAVA的,需要自行CD到該JAVA目錄執行command。
==================================================================

基本控制JVM內存的命令參數,一般來說配置這裡的參數,最為重要,其他的參數較屬於輔助優化型。
-Xms 初始Heap值
-Xmx 最大Heap值
MaxPermSize 永久保存區最大值

-Xms與-Xmx 這兩種參數設置相同會比較好,如此一來JVM不必再重新分配記憶體。

PermGen space的全稱是Permanent Generation space是指記憶體的永久保留區
這一部分用於存放Class和Meta的資訊,Class在Load時被放入PermGen space區域, 它和存放Instance的Heap區域不同, GC(Garbage Collection)不會在主程序運行期對PermGen space區域進行清理,如果APP會Load很多的Class的話,就很可能出現PermGen space錯誤。
這種錯誤常見在web服務器對JSP進行pre compile的時候。
例如 用了太多第三方 jar 檔。
參考(http://blog.xuite.net/keanuhome/blog/56035165Tomcat+%E7%94%A2%E7%94%9FOutOfMemoryError)

-Xms -Xmx =可假想作動態記憶體存放區
PermSize MaxPermSize =可假想作靜態記憶體存放區

PermSize 只會累積增加,不會減少。 預設初始約在32MB 最大64MB,如果要提高,約在128~512MB區間較為理想。
=====================================================

以下是可以調整JVM其他參數配置,以達到性能優化,皆是以針對GC(Garbage Collection)做設定。
JVM記憶體有分為兩區,舊空間(old Gen)、新空間(Young Gen),一般來說GC較頻繁在新空間活動。


NewSize, MaxNewSize: 新空間的初始大小、最大大小。

+UseParNewGC: 使GC運行在多個CPU,可增加程式的代謝。

+UseConcMarkSweepGC: 可縮短GC暫停的時間,提高效率。

SurvivorRatio: 控制生存空間與Eden的大小比例,預設為25,必要時可能需要調整。
指定生存空間比率,確保保留小空間給Eden。 Eden應該是指不被GC回收的安全區塊。

MaxTenuringThreshold: JDK1.6之後,設定值在0~15,表示一個物件記憶體在新空間被移動了0~15次,
還沒有被收回,就會轉入舊空間。

ParallelGCThreads: 這個設定,可根據CPU核心數來讓GC並行。ex:2、4、8

以上+的符號,我在猜是boolean值,有設定即可,至於其他設定的參數數值需要特別測試,才知道差別在哪,屬於比較進階的做法。
如果沒有設定以上這些參數,JVM會自己以較合適的方法做調整。


參考資料
https://www.liferay.com/zh/documentation/liferay-portal/6.1/user-guide/-/ai/performance-tuni-5 (此連結有Liferay JVM設定Sample)
http://13591787.blog.hexun.com.tw/45035890_d.html (此連結有他人測試多種組合參數結果)
http://docs.oracle.com/cd/E13209_01/wlcp/wlss30/configwlss/jvmgc.html
http://www.liferaysolution.com/2013/03/speedup-liferay-application.html
http://rritw.com/a/fuwuqiruanjian/Tomcat/20101104/60833.html

沒有留言:

張貼留言