jvm性能調優

目前有些項目的web服務器按期會出現沒有響應的情況,有可能由服務器的full gc一塊兒的長暫停web

基於項目經驗,給出以下調優sample參數算法

-Xms4096m //JVM最小可用內存服務器

-Xmx4096m //JVM最大可用內存多線程

-XX:NewSize=1024m //新生代內存空間 通常爲jvm內存空間的1/3到1/4併發

-XX:MaxNewSize=1024m//新生代最大內存空間 jvm

-XX:PermSize=256m //永生代的內存空間(class的元數據等等信息,根據實際項目來)spa

-XX:MaxPermSize=256m//永生代的最大內存空間.net

-Xverify:none//類加載過程:加載、驗證、準備、解析、初始化,   驗證階段對JVM是重要但不是必要階段,能夠經過-Xverify:none參數關閉大部分類驗證措施。命令行

-XX:+UseParNewGC   //新生代的內存回收算法(若是老年代爲cms的話,新生代就爲UseParNewGC   )線程

-XX:+UseConcMarkSweepGC//老年代的內存回收算法(採用CMS併發回收算法, http://blog.csdn.net/linsongbin1/article/details/51686158    和並行的區別能夠百度一下)

-XX:+UseCMSCompactAtFullCollection//(CMS是標記算法,會產生內存碎片,開啓此項,就是每次cms回收後會對內存進行壓縮,這樣會影響效率可是碎片一多會引發full gc)

-XX:CMSFullGCsBeforeCompaction=3//(配合上面的 選項,就是多少次cms後進行內存壓縮,根據項目狀況自行調整)

-XX:+CMSParallelRemarkEnabled//(cms標記算法的第三步,從新標記(CMS-remark)會暫停全部應用,開啓此項就是從新標記的時候採用多線程同時進行,提升效率)

-XX:+CMSScavengeBeforeRemark//(強制remark以前開始一次minor gc,減小remark的暫停時間可是在remark以後也將當即開始又一次minor gc

-XX:CMSInitiatingOccupancyFraction=70//(默認CMS是在tenured generation沾滿68%的時候開始進行CMS收集,若是你的年老代增加不是那麼快,而且但願下降CMS次數的話,能夠適當調高此值

-XX:SoftRefLRUPolicyMSPerMB=0//這個參數比較有用的,官方解釋是:Soft reference在虛擬機中比在客戶集中存活的更長一些。其清除頻率能夠用命令行參數 -XX:SoftRefLRUPolicyMSPerMB=<N>來控制,這能夠指定每兆堆空閒空間的 soft reference 保持存活(一旦它不強可達了)的毫秒數,這意味着每兆堆中的空閒空間中的 soft reference 會(在最後一個強引用被回收以後)存活1秒鐘。注意,這是一個近似的值,由於  soft reference 只會在垃圾回收時纔會被清除,而垃圾回收並不總在發生。系統默認爲一秒,我以爲不必等1秒,客戶集中不用就馬上清除,改成 -XX:SoftRefLRUPolicyMSPerMB=0;


另外 ,年輕代和老年代的回收算法是不同的,須要配套使用,詳細能夠百度,還有開啓並行和併發算法的時候,能夠指定CPU數,通常不用指定默認就能夠