jvm性能調優

 

jvm的堆棧=年輕代+年老代,持久代是非堆棧,默認持久代64M;1.6版本以前通常運行在 client模式下!性能較差,實際生產須要注意,下面來張圖直觀點!html

CMS Old Gen:年老代   = 堆大小-年輕代   -Xms/-Xmx  -   -Xmn  ;建議-Xmx ,-Xms設置成同樣大java

Par Eden Space + Par Survivor Space :年輕代   -Xmn 設置,影響實時處理性能linux

CMS Perm Gen: 持久代XX:PermSize,-XX:MaxPermSize設置,建議設置同樣大windows

Code Cache:代碼緩存去,編譯和保存本地代碼 -XX:InitialCodeCacheSize , -XX:ReservedCodeCacheSize 來設置,緩存

  若是代碼緩存被佔滿,JVM會打印出一條警告消息,並切換到interpreted-only 模式:JIT編譯器被停用,字節碼將再也不會被編譯成機器碼,所以運行效率會下降1個數量級tomcat

-XX:+UseCodeCacheFlushing:當代碼緩存區滿後,jvm放棄繼續編譯本地代碼和方法,阻止熱部署引發的內存泄漏!多線程

 

 

jvm參數app

參數 jdk1.6 jdk1.7 jdk1.8 說明
-server   - - jre\server\jvm.dll server VM模式,不然默認-client1.6,以後默認server   VM
-Xms -Xmx       堆棧大小,起始堆棧,最大可用堆棧
-Xmn       堆棧年輕代大小,Sun官方推薦爲整個堆棧的3/8
-Xss       每一個線程的大小,通常一個請求就是一個線程,這個值不宜多大,建議不超過1M
-XX:+AggressiveOpts       新技術優化 啓用,升級版本時,若是有的話
-XX:+UseBiasedLocking       啓用一個優化了的線程鎖
-XX:PermSize=128M-XX:MaxPermSize=256M     - JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64
-XX:+DisableExplicitGC       顯示的調用」System.gc()」控制
-XX:+UseParNewGC       對年輕代採用多線程並行回收
-XX:MaxTenuringThreshold     0~15 設置垃圾最大年齡(次數)
-XX:+CMSParallelRemarkEnabled       在使用UseParNewGC 的狀況下,   儘可能減小 mark 的時間
-XX:+UseCMSCompactAtFullCollection       在使用concurrent gc   的狀況下, 防止 memoryfragmention, 對live object 進行整理, 使 memory 碎片減小
-XX:LargePageSizeInBytes       指定 Java heap的分頁頁面大小
-XX:+UseFastAccessorMethods       get,set 方法轉成本地代碼
-XX:+UseCMSInitiatingOccupancyOnly       指示只有在 oldgeneration   在使用了初始化的比例後concurrent collector 啓動收集
-XX:CMSInitiatingOccupancyFraction=70      
默認1.5:68,1.6/1.7:92;年老代開始回收閥值,需知足(Xmx-Xmn)*(100-   CMSInitiatingOccupancyFraction)/100>=Xmn(1-1/(sradio+2))  近似Xmn ,其實差蠻多的
即:Xmn *(200-CMSInitiatingOccupancyFraction)/(100-CMSInitiatingOccupancyFraction)<= Xmn
-Djava.awt.headless=true       禁用圖形化函數調用

 調優設置less

    一.  環境變量中增長 JAVA_OPTS而後把本身設置好的參數放進去,例如:jvm

32bit OS:

JAVA_OPTS=

-server

-Djava.awt.headless=true

-Xms1536M
-Xmx1536M
-Xmn256M
-Xss512k
-XX:+AggressiveOpts
-XX:+UseBiasedLocking
-XX:PermSize=128M
-XX:MaxPermSize=256M
-XX:+DisableExplicitGC
-XX:MaxTenuringThreshold=15
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80

64bit OS:

JAVA_OPTS=

-server

-Djava.awt.headless=true

-Xms6g

-Xmx6g

-Xmn544M

-Xss512k

-XX:+AggressiveOpts

-XX:+UseBiasedLocking

-XX:+DisableExplicitGC

-XX:MaxTenuringThreshold=15

-XX:+UseConcMarkSweepGC

-XX:+UseParNewGC

-XX:+CMSParallelRemarkEnabled

-XX:+UseCMSCompactAtFullCollection

-XX:LargePageSizeInBytes=128m

-XX:+UseFastAccessorMethods

-XX:+UseCMSInitiatingOccupancyOnly

-XX:CMSInitiatingOccupancyFraction=90

二. 在app啓動/初始化時加上啓動參數,如tomcat啓動時

catalina.bat  windows的:

set JAVA_OPTS=-server -Xms1536M ... ... 本身組合的參數

catalina.sh linux/unix的:

export JAVA_OPTS="-server -Xms1536M ... ...本身組合的參數"

windows server 安裝版本:

$(tomcate_base_dir)/bin/Tomcat7w.exe ,啓動後填寫參數

填寫在:java-->JavaOpions 中,若是有填寫 -Xms,-Xmx,-Xss最後的3個不要填寫,不然會被覆蓋,注意參數最後不能有空格,不然會失敗(tomcat啓動不了)

備註:

  1. 在jre/bin/server/下Xusage.txt有參數說明及用法;

  2. 32bit,64bit OS  jvm能夠設置使用的堆棧也是不同的,通常32bit os理論可用的最大爲2048M,二實際其自身還佔使用一些,

  像緩存空間,非堆棧等 通常默認不超過256M,加上自身調節的空間要達到 300+M才行,因此堆棧最大不會超過1700M,具體大小自行驗證,

  64bit OS通常設置多少,均可以使用的!

     參考:

  http://www.cnblogs.com/jack204/archive/2012/07/02/2572934.html

  http://blog.csdn.net/lifetragedy/article/details/7708724

  http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

相關文章
相關標籤/搜索