V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pank
V2EX  ›  Java

那位大神帮我看看 FULL GC 时间过长怎么定位

  •  
  •   pank · 2018-01-16 17:19:58 +08:00 · 9184 次点击
    这是一个创建于 2502 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于我在压测的时候 qps 一直不达标(现在接近 300,但要求是 500 )。在阿里的 apm 上查看有慢事务,点进去以后感觉有点奇怪,除了核心业务代码之外还有很长时间不知道耗费在哪。

    慢事物

    阿里的技术人员说可能是因为 gc 的问题,观察 jvm 监控,发现垃圾回收时间确实有点长:

    Alt text

    fullgc 上耗时接近 4s,请教一下懂这个的大哥帮我分析分析哈。

    jvm 参数:-Xms30g -Xmx30g -Xmn20g

    jmap 查看如下图:

    Alt text

    12 条回复    2018-01-19 12:38:13 +08:00
    anthow
        1
    anthow  
       2018-01-16 17:25:57 +08:00
    30g...
    jadec0der
        2
    jadec0der  
       2018-01-16 19:55:00 +08:00
    对你的内存来说,这个时间并不长,你应该想办法避免 FullGC。或者是控制 FullGC 的时候摘掉流量
    neoblackcap
        3
    neoblackcap  
       2018-01-16 20:02:10 +08:00
    30G 的内存是不是可以无脑推 JDK8 以上呢?毕竟 G1 我记得是用 CPU 换更低的回收时间
    feverzsj
        4
    feverzsj  
       2018-01-16 20:07:06 +08:00
    你虚拟机内存多大啊,一般这种大都是 virutal memory trashing
    honeycomb
        5
    honeycomb  
       2018-01-16 23:56:08 +08:00 via Android
    这么大的堆,试试 G1 ?
    coolcfan
        6
    coolcfan  
       2018-01-17 00:37:36 +08:00 via Android
    让 JVM 输出 GC Log,告诉你 Full GC 的原因
    pank
        7
    pank  
    OP
       2018-01-17 10:53:41 +08:00
    @jadec0der 谢谢回复,怎么可以避免 full gc 呢
    pank
        8
    pank  
    OP
       2018-01-17 10:54:29 +08:00
    @neoblackcap 我换了 G1 以后 fullgc 倒是没有了,youngGC 又上去了。。。,qps 还下去了。
    pank
        9
    pank  
    OP
       2018-01-17 10:55:50 +08:00
    @feverzsj 物理内存是 32g
    jadec0der
        10
    jadec0der  
       2018-01-17 11:30:04 +08:00
    @pank coolcfan 不是已经告诉你了吗
    neoblackcap
        11
    neoblackcap  
       2018-01-17 11:34:27 +08:00
    @pank 不想自己继续搞的话,上 Azul 的 Zing JVM 吧,4T 都能保持在 10ms 一下。不过啊,我觉得你可能还是打一下 snapshot 之类的看看堆里面到底是什么对象比较多,为什么那么容易触发 gc,是内存泄漏了,还是自己的程序有问题。确定程序没有问题再调优吧。
    要不然你程序有问题,上了 Zing JVM 也是用钱搞定而已
    kiddult
        12
    kiddult  
       2018-01-19 12:38:13 +08:00
    -Xmn 设置小一些,比如 1G 或者 2G,自己试验一下比较好,youngGC 多点问题不大,时间不会耗在这上面多少,太大了会导致 GC 时间太长

    QPS 先看看没有 GC 的那段时间是多少,一般和 GC 关系不应该太大才对,GC 占用程序的总时间比例很小的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:28 · PVG 02:28 · LAX 10:28 · JFK 13:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.