JVM調優(yōu)的幾種策略 |奧遠科技是專注于信息化建設與互聯(lián)網產品開發(fā)的高新科技企業(yè),主要服務于百強企業(yè)、上市公司、大型集團網站建設。承接大型電商網站、復雜功能型網站、APP、微信、小程序,oa辦公管理系統(tǒng),ERP管理系統(tǒng)開發(fā)。為客戶提供一站式網絡營銷解決方案,全國統(tǒng)一客服熱線:4000-880-989。 "> JVM調優(yōu)的幾種策略 |>JVM調優(yōu)的幾種策略 ">

国产二区免费在线观看-青青操在线观看国产视频-男人的天堂 在线一区-黑丝美女被内射视频免费观看

技術中心

這里象征著我們的態(tài)度和能力

>JVM調優(yōu)的幾種策略
作者:中國IT實驗室    來源:中國IT實驗室    發(fā)布時間:2012-09-14      瀏覽次數(shù):10824
分享到:
歡迎進入Java社區(qū)論壇,與200萬技術人員互動交流 >>進入
    JVM參數(shù)調優(yōu)是一個很頭痛的問題,可能和應用有關系,別人說可以的對自己不一定管用。下面是本人一些JVM調優(yōu)的實踐經驗,希望對讀者能有幫助,環(huán)境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G內存,dell2950服務器。
   
    JVM調優(yōu)
   
    一:JVM調優(yōu)之串行垃圾回收
   
    也就是默認配置,完成10萬request用時153秒。JVM參數(shù)配置如下:
   
    $JAVA_ARGS.=“-Dresin.home=$SERVER_ROOT-server
   
    -Xms2048M-Xmx2048M-Xmn512M
   
    -XX:PermSize=256M-XX:MaxPermSize=256M
   
    -XX:MaxTenuringThreshold=7-XX:GCTimeRatio=19
   
    -Xnoclassgc-Xloggc:log/gc.log
   
    -XX:+PrintGCDetails-XX:+PrintGCTimeStamps”;
   
    這種配置一般在resin啟動24小時內似乎沒有大問題,網站可以正常訪問,但查看日志發(fā)現(xiàn),在接近24小時時,F(xiàn)ullGC執(zhí)行越來越頻繁,大約每隔3分鐘就有一次FullGC,每次FullGC系統(tǒng)會停頓6秒左右,作為一個網站來說,用戶等待6秒恐怕太長了,所以這種方式有待改善。MaxTenuringThreshold=7表示一個對象如果在救助空間移動7次還沒有被回收就放入年老代,GCTimeRatio=19表示java可以用5%的時間來做垃圾回收,1/(1+19)=1/20=5%.
   
    二:JVM調優(yōu)之并行回收
   
    完成10萬request用時117秒,配置如下:
   
    $JAVA_ARGS.=“-Dresin.home=$SERVER_ROOT-server-Xmx2048M
   
    -Xms2048M-Xmn512M-XX:PermSize=256M-XX:MaxPermSize=256M
   
    -Xnoclassgc-Xloggc:log/gc.log-XX:+PrintGCDetails
   
    -XX:+PrintGCTimeStamps-XX:+UseParallelGC-XX:ParallelGCThreads=20
   
    -XX:+UseParallelOldGC-XX:MaxGCPauseMillis=500
   
    -XX:+UseAdaptiveSizePolicy-XX:MaxTenuringThreshold=7
   
    -XX:GCTimeRatio=19”;
   
    并行回收我嘗試過多種組合配置,似乎都沒什么用,resin啟動3小時左右就會停頓,時間超過10秒。也有可能是參數(shù)設置不夠好的原因,MaxGCPauseMillis表示GC最大停頓時間,在resin剛啟動還沒有執(zhí)行FullGC時系統(tǒng)是正常的,但一旦執(zhí)行FullGC,MaxGCPauseMillis根本沒有用,停頓時間可能超過20秒,之后會發(fā)生什么我也不再關心了,趕緊重啟resin,嘗試其他回收策略。
   
    三:JVM調優(yōu)之并發(fā)回收
   
    完成10萬request用時60秒,比并行回收差不多快一倍,是默認回收策略性能的2.5倍,配置如下:
   
    $JAVA_ARGS.=“-Dresin.home=$SERVER_ROOT-server
   
    -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M
   
    -XX:MaxPermSize=256M-XX:+UseConcMarkSweepGC
   
    -XX:MaxTenuringThreshold=7-XX:GCTimeRatio=19
   
    -Xnoclassgc-Xloggc:log/gc.log-XX:+PrintGCDetails
   
    -XX:+PrintGCTimeStamps-XX:+UseCMSCompactAtFullCollection
   
    -XX:CMSFullGCsBeforeCompaction=0”;
   
    這個配置雖然不會出現(xiàn)10秒連不上的情況,但系統(tǒng)重啟3個小時左右,每隔幾分鐘就會有5秒連不上的情況,查看gc.log,發(fā)現(xiàn)在執(zhí)行ParNewGC時有個promotionfailed錯誤,從而轉向執(zhí)行FullGC,造成系統(tǒng)停頓,而且會很頻繁,每隔幾分鐘就有一次,所以還得改善。UseCMSCompactAtFullCollection是表是執(zhí)行FullGC后對內存進行整理壓縮,免得產生內存碎片,CMSFullGCsBeforeCompaction=N表示執(zhí)行N次FullGC后執(zhí)行內存壓縮。
   
    四:JVM調優(yōu)之增量回收
   
    完成10萬request用時171秒,太慢了,配置如下:
   
    $JAVA_ARGS.=“-Dresin.home=$SERVER_ROOT-server
   
    -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M
   
    -XX:MaxPermSize=256M-XX:MaxTenuringThreshold=7
   
    -XX:GCTimeRatio=19-Xnoclassgc-Xloggc:log/gc.log
   
    -XX:+PrintGCDetails-XX:+PrintGCTimeStamps-Xincgc”;
   
    似乎回收得也不太干凈,而且也對性能有較大影響,不值得試。
   
    五:JVM調優(yōu)之并發(fā)回收的I-CMS模式
   
    和增量回收差不多,完成10萬request用時170秒。配置如下:
   
    $JAVA_ARGS.=“-Dresin.home=$SERVER_ROOT-server
   
    -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M
   
    -XX:MaxPermSize=256M-XX:MaxTenuringThreshold=7
   
    -XX:GCTimeRatio=19-Xnoclassgc-Xloggc:log/gc.log
   
    -XX:+PrintGCDetails-XX:+PrintGCTimeStamps
   
    -XX:+UseConcMarkSweepGC-XX:+CMSIncrementalMode
   
    -XX:+CMSIncrementalPacing
   
    -XX:CMSIncrementalDutyCycleMin=0
   
    -XX:CMSIncrementalDutyCycle=10-XX:-TraceClassUnloading”;
   
    采用了sun推薦的參數(shù),回收效果不好,照樣有停頓,數(shù)小時之內就會頻繁出現(xiàn)停頓,什么sun推薦的參數(shù),照樣不好使。
   
    六:JVM調優(yōu)之遞增式低暫停收集器
   
    又叫什么火車式回收,完成10萬request用時153秒,配置如下:
   
    $JAVA_ARGS.=“-Dresin.home=$SERVER_ROOT-server
   
    -Xms2048M-Xmx2048M-Xmn512M-XX:PermSize=256M
   
    -XX:MaxPermSize=256M-XX:MaxTenuringThreshold=7
   
    -XX:GCTimeRatio=19-Xnoclassgc-Xloggc:log/gc.log
   
    -XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+UseTrainGC”;
   
    該配置效果也不好,影響性能,所以沒試。
   
    七:相比之下,還是并發(fā)回收比較好,性能比較高,只要能解決ParNewGC(并行回收年輕代)時的promotionfailed錯誤就一切好辦了,查了很多文章,發(fā)現(xiàn)引起promotionfailed錯誤的原因是CMS來不及回收(CMS默認在年老代占到90%左右才會執(zhí)行),年老代又沒有足夠的空間供GC把一些活的對象從年輕代移到年老代,所以執(zhí)行FullGC.CMSInitiatingOccupancyFraction=70表示年老代占到約70%時就開始執(zhí)行CMS,這樣就不會出現(xiàn)FullGC了。SoftRefLRUPolicyMSPerMB這個參數(shù)也是我認為比較有用的,官方解釋是softlyreachableobjectswillremainaliveforsomeamountoftimeafterthelasttimetheywerereferenced.Thedefaultvalueisonesecondoflifetimeperfreemegabyteintheheap,我覺得沒必要等1秒,所以設置成0.配置如下
   
    $JAVA_ARGS.=“-Dresin.home=$SERVER_ROOT-server-Xms2048M
   
    -Xmx2048M-Xmn512M-XX:PermSize=256M-XX:MaxPermSize=256M
   
    -XX:SurvivorRatio=8-XX:MaxTenuringThreshold=7
   
    -XX:GCTimeRatio=19-Xnoclassgc-XX:+DisableExplicitGC
   
    -XX:+UseParNewGC-XX:+UseConcMarkSweepGC
   
    -XX:+CMSPermGenSweepingEnabled
   
    -XX:+UseCMSCompactAtFullCollection
   
    -XX:CMSFullGCsBeforeCompaction=0
   
    -XX:+CMSClassUnloadingEnabled-XX:-CMSParallelRemarkEnabled
   
    -XX:CMSInitiatingOccupancyFraction=70
   
    -XX:SoftRefLRUPolicyMSPerMB=0-XX:+PrintClassHistogram
   
    -XX:+PrintGCDetails-XX:+PrintGCTimeStamps
   
    -XX:+PrintGCApplicationConcurrentTime
   
    -XX:+PrintGCApplicationStoppedTime
   
    -Xloggc:log/gc.log”;
   
    上面這個配置內存上升的很慢,24小時之內幾乎沒有停頓現(xiàn)象,最長的只停滯了0.8s,ParNewGC每30秒左右才執(zhí)行一次,每次回收約0.2秒,看來問題應該暫時解決了。
?2008-2022 CORPORATION ALL Rights Reserved. 昆明奧遠科技有限公司版權所有 滇ICP備09003328號-1 滇公網安備 53011102000818號 增值電信業(yè)務經營許可證號:滇B2-20110045
昆明那家網絡公司好,新媒體運營,網站優(yōu)化,網絡推廣,網站建設,網頁設計,網站設計,網站推廣,云南網站公司,昆明新媒體公司,云南網紅主播,昆明SEO公司,昆明網站建設,昆明網絡推廣,昆明網站優(yōu)化,昆明網站推廣,紅河網站建設,大理網絡公司,曲靖網絡公司,麗江網站設計,昭通網絡公司,保山大數(shù)據(jù)服務,智慧高速建設,智慧校園服務,云南IDC服務商,網絡安全測評,等保測評,網站關鍵詞排名優(yōu)化服務,服務客戶盡超2000余家,一切盡在奧遠科技,服務電話:13888956730