目前有些項目的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;