• 记一次线上GC问题排查


     1. 记一次线上GC问题排查

    1. dump 过程

      -查询线上JAVA进程号
      ps -ef | grep java
      -切换用户
      sudo -iu sankuai
      -dump JAVA heap信息
      jmap -dump:file=heap-12-09 {pid}
      -移动到tmp路径好传输到本地分析
      mv /home/sankuai/heap-12-09 /tmp/
      -传输问题件:存在权限不允许问题,打开设置-共享
      scp -r /tmp/heap-12-09 wangjie@172.30.129.66:/Users/wangjie/Downloads
      -JAVA8工具路径
      /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands

       

    2. 启动 VisualVM,打开堆 dump 文件,显示内存不够,更改启动参数,重新启动 jvisualvm

      jvisualvm -J-Xmx8096M
    3. 加载堆文件, DefaultTransaction占用大小1个G,且未关闭

    4.  

    5. 存在大量的DefaultTransaction 对象,栈过深。看字段与代码符合:

    6. 分析为线上transaction 对象过多,且处于未 complete 状态,造成对象未回收,感觉像是年轻代被回收,升级为大对象,进入老年代,造成FullGC

    7. 初步怀疑是Rhino 本身bug或降级使用不当引起,下周看源码接着排查

    8. 与Rhino 沟通发现,cquery 使用的是 1.2.4.3 版本,1.2.4.3被替换过,部署构建的时候用的缓存中的旧jar包,未选择清除缓存。

     

    相关引用:

    https://docs.sankuai.com/dp/arch/cat/bigReport/faq/#20cat-stack

    这个问题就是cat新建Transaction对象没有被关闭, cat默认是树层次结构, 会嵌套, 如果一直没有关闭, 就会导致堆栈溢出, 最终导致内存fullgc

    该问题与本次问题堆栈信息一致,而且同样是操作 Rhino 手动降级导致的,但未复现

     

  • 相关阅读:
    设计模式之策略模式
    整理Java面向对象
    springboot+easyui+jpa实现动态权限角色的后台管理系统(二)
    随笔9
    随笔8
    随笔7
    PHP curl方法集合
    curl json方式提交
    富文本图片和视频标签增加域名前缀
    fastadmin原生编辑按钮点击默认100%显示
  • 原文地址:https://www.cnblogs.com/jjfan0327/p/13434024.html
Copyright © 2020-2023  润新知