有在大型 Netty 长连接服务器中使用 G1 的吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
xhinliang
V2EX    Java

有在大型 Netty 长连接服务器中使用 G1 的吗?

  •  
  •   xhinliang Jan 28, 2018 4953 views
    This topic created in 3012 days ago, the information mentioned may be changed or developed.

    楼主现在生产环境是若干台 Netty 长连接服务器,每个 JVM 节点的最大堆设置为 8G,使用了 CMS。 目前单 JVM 节点峰值连接数大概是 10w 左右,在高峰的时候很容易出现 2s 以上的 Full GC。

    目前考虑换成 G1。

    前两天试用了下,发现效果差强人意,虽然少了 Full GC,但是机器 CPU 使用率也变高了,平均 GC 时间几乎是原来的两倍( 70ms => 138ms )

    有踩过坑的小伙伴分享下经验吗?

    15 replies    2018-01-29 11:46:50 +08:00
    jeremaihloo
        1
    jeremaihloo  
       Jan 28, 2018   3
    差强人意:大体上使人满意
    movistar
        2
    movistar  
       Jan 28, 2018
    少了 2 秒的 Full GC 但是 YGC 增加了
    这叫差强人意....没问题.........
    Rickkkkkkk
        3
    Rickkkkkkk  
       Jan 28, 2018
    躲开高峰期定时的调用 system.gc()
    metrxqin
        4
    metrxqin  
       Jan 28, 2018 via Android
    jstat -gccapacity 贴下?
    wdlth
        5
    wdlth  
       Jan 28, 2018
    不清楚你是用什么参数的,如果你还保留原有的一些 GC 参数,会造成参数间的互相影响。
    xhinliang
        6
    xhinliang  
    OP
       Jan 29, 2018
    @jeremaihloo 我就是表达这个意思....
    skyFuture
        7
    skyFuture  
       Jan 29, 2018
    按照 netty 的设计,堆外内存是可以重用,发生 fgc 的概率应该很小。会不会发生了内存泄漏呢?
    lujiajing1126
        8
    lujiajing1126  
       Jan 29, 2018 via iPhone
    做个 heap snapshot 分析下哪些对象比较大会且容易被 gc 然后针对性优化一下吧?
    pczb
        9
    pczb  
       Jan 29, 2018
    g1 的 gc 138ms 时间是 stop-the-world 的时间还是其他
    xhinliang
        10
    xhinliang  
    OP
       Jan 29, 2018
    @skyFuture 没有发生 Full GC
    xhinliang
        11
    xhinliang  
    OP
       Jan 29, 2018
    @pczb Stop The World
    xhinliang
        12
    xhinliang  
    OP
       Jan 29, 2018
    @lujiajing1126 谢谢,我下午试试
    xhinliang
        13
    xhinliang  
    OP
       Jan 29, 2018
    NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
    0.0 12582912.0 5713920.0 0.0 212992.0 5500928.0 0.0 12582912.0 6868992.0 6868992.0 0.0 1150976.0 115188.0 0.0 1048576.0 14072.0 17969 0
    xhinliang
        14
    xhinliang  
    OP
       Jan 29, 2018
    seancheer
        15
    seancheer  
       Jan 29, 2018
    关于一些参数
    -XX:MaxTenuringThreshold=n Sets the maximum tenuring threshold for use in adaptive GC sizing. The current largest value is 15. The default value is 15 for the parallel collector and is 4 for CMS.(需要注意的是,这个参数默认为 15,但是对于 CMS 来讲,默认为 4,该段文字摘自官方文档)
    -XX:+UseCMSCompactAtFullCollection:CMS 使用标记-清除法进行垃圾回收,因此不对内存随便进行整理,使用该选项可以指定对内存碎片进行整理,该选项默认是开启的
    -XX:+ScavengeBeforeFullGC:指定进行 fullGC 前进行一次 young GC
    -XX:CMSInitiatingOccupancyFraction:CMS 被触发时老年代使用的比例
    -XX:MaxGCPauseMillis=50:一次 GC 的最大时间,单位为 ms,使用 parallel scanvenge 算法和 G1 的时候才会有效
    -XX:PretenureSizeThreshold:超过设定的大小,那么对象将会直接被分配到老年代。单位为 byte,默认为 0,不开启该功能。(对于 PS 的收集算法,该选项无效)
    -XX:+HandlerPromotionFailure:在 Minore GC 前,jvm 会预估老年代最大可用的连续空间是否大于新生代所有对象总空间,如果小于,那么如果打开此开关,jvm 会计算老年代最大可用的连续空间是否大于 [历代] 年轻代晋升到老年代所有对象的平均大小,如果小于,那么会进行 Minore GC,否则,进行 full GC ; 如果此开关没有打开,那么会直接进行 full GC,(目前根据 jdk 源码,该选项已经无效,jvm 会直接进行上述的判断)
    GC 常见的几个误解:
    除了 CMS 和 G1 外,PSYoung Gen,DefNew,PSOldGen,ParOldGen 等收集算法都需要 stw。
    STW(stop-the-world)并不等于 full gc,full gc 指发生在年轻代和老年代的 gc。
    CMS 是发生在老年代的 GC 算法,但是其中的两个阶段,initial marking 和 final remark 发生在年轻代和老年代,因此其 stw 属于 full gc 的统计数据里。
    当 CMS 运行过程中,老年代空间不够,默认会使用 Serial gc 进行一次 full gc。


    楼主可以参考着看是不是需要调整。。
    About     Help     Advertise     Blog     API     FAQ     Solana     5833 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 93ms UTC 06:34 PVG 14:34 LAX 23:34 JFK 02:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86