<acronym id="cr5pu"></acronym>
  • <kbd id="cr5pu"><font id="cr5pu"></font></kbd>
  • <li id="cr5pu"><output id="cr5pu"></output></li>
    <del id="cr5pu"><li id="cr5pu"></li></del><center id="cr5pu"></center>
    <output id="cr5pu"><kbd id="cr5pu"></kbd></output>
  • <rp id="cr5pu"></rp>
    <var id="cr5pu"></var>
  • <nav id="cr5pu"></nav>
  • The NoteBook of EricKong

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

    增加GC相關選項:

    1. -verbose:gc
    2. -XX:+UseGCLogFileRotation
    3. -XX:NumberOfGCLogFiles=5
    4. -XX:GCLogFileSize=512K
    5. -XX:+PrintGCDetails
    6. -XX:+PrintGCTimeStamps
    7. -XX:+PrintGCDateStamps
    8. -XX:+PrintTenuringDistribution
    9. -XX:+PrintGCApplicationStoppedTime
    10. -Xloggc:/var/app/log/Push-server/gc.log
    1. 如果不能確定所需內存,使用自動jvm自動調優;
    2. 大致確定所需內存后,使用-Xmx -Xms設置堆大??;
    3. 觀察GC log確定FullGC后剩余堆大?。礊榛钴S數據大?。?;
    4. 整個堆大小宜為老年代活躍數據大小的3-4倍;
    5. 永久帶大小應該比永久帶活躍數據大1.2~1.5倍;
    6. 新生代空間應該為老年代空間活躍數據的1~1.5倍;
    7. 通過top命令觀察棧占用空間、直接內存占用空間,決定所需機器內存大??;
    8. 新生代大小決定了Minor GC的周期和時長,縮短新生代大小可以減少停頓時長,但是增加了GC頻率;在調整新生代大小時,盡量保持老年代大小不變;
    9. 老年代大小不應該小于活躍數據的1.5倍;新生代空間至少為java堆大小的10%;增加堆大小時,注意不要超過可用物理內存數;
    10. 從throughput收集器遷移到CMS時,需要將老年代空間增加20%~30%;
    11. 新生代分為Eden和Survivor兩部分,Survivor可以通過-XX:SurvivorRatio=xx來控制,對應的大小為-Xmn<value>/(ratio+2);
    12. 通過-XX:MaxTenuringThreshold=<n>來指定晉升閾值(年齡),n為0~15之間;
    13. 期望Survivor空間為剩余總存活對象大小的2倍(age=1;
    14. 注意調節Survivor大小時,保持Eden大小不變;
    15. 如果Survivor空間足夠大,且對象大部分并未到達老年代,那么就可以將晉升年紀指定的足夠大(15)。在Eden與Survivor之間復制和CMS老年代空間壓縮之間,我們寧愿選擇前者;
    16. CMS必須能以對象從新生代提升到老年代的同等速度對老年代中的對象進行收集,否則,就會失速;
    17. 如果觀察到'concurrent mode failures',意味著失速已經發生,必須減少-XX:CMSInitiatingOccupancyFraction=<percent>的值;
    18. 使用上述選項的同時,最好同時使用-XX:+UseCMSInitiatingOccupancyOnly,強制使用該比例,該比例的大小應該大于老年代占用空間和活躍數據大小之比,一般而言老年代大小*該比例>1.5*老年代活躍數據大小;
    19. 使用-XX:+ExplicitGCInvokesConcurrentAndUnloadsCloasses可以使用CMS進行顯式垃圾回收(System.gc());通過-XX:+DisableExplicitGC關閉顯示垃圾回收(慎用);
    20. 使用-XX:+CMSClassUnloadingEnabled打開永久帶垃圾回收,使用-XX:+CMSPermGenSweepingEnabled打開CMS對永久帶的掃描;使用-XX:CMSInitiatingPermOccupancyFraction=<perscent>激活回收比例閾值;
    21. 使用-XX:ParallelGCThreads=<n>控制掃描線程數;使用-XX:+CMSScavengeBeforeRemark強制重新標記前進行一次MinorGC;如果由大量的引用對象或可終結對象要處理,使用-XX:+ParallelRefProcEnabled;
    22. CMS包括Minor GC所帶來的開銷應該小于10%;
    23. 如果缺少長時間調優的條件,安全起見,可以使用G1,僅設置如下參數即可:
    1. -d64
    2. -Xmx5g
    3. -Xms5g
    4. -XX:PermSize=100m
    5. -XX:MaxPermSize=100m
    6. -XX:MaxDirectMemorySize=1g
    7. -XX:+UseG1GC
    8. -XX:MaxGCPauseMillis=80

    G1不必明確設置新生代大小,其自動調優也十分可靠,對于停頓時間往往在長時間運行后可以達到預期效果;對吞吐量優先的應用,可能不是那么明顯。

    posted on 2015-07-23 14:30 Eric_jiang 閱讀(1585) 評論(0)  編輯  收藏 所屬分類: JVM

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    久久一级片
    <acronym id="cr5pu"></acronym>
  • <kbd id="cr5pu"><font id="cr5pu"></font></kbd>
  • <li id="cr5pu"><output id="cr5pu"></output></li>
    <del id="cr5pu"><li id="cr5pu"></li></del><center id="cr5pu"></center>
    <output id="cr5pu"><kbd id="cr5pu"></kbd></output>
  • <rp id="cr5pu"></rp>
    <var id="cr5pu"></var>
  • <nav id="cr5pu"></nav>