zoukankan      html  css  js  c++  java
  • 排查线上内存泄漏,RingBufferLogEvent类内存占用过高,skyWalking内存占用过高

    项目运行了一段时间 运维那边反馈项目内存过高,首先我们把线上的jvm内存文件导出来,来看看哪些对象有问题 , 我这边演示就在windows中的cmd演示了  因为jdk提供的命令都一样

    1查看java进程  命令: jps-l

    可以看到我们的java进程id是 149992

    2导出内存文件到本地,如果是在服务器中需要把文件 下载到本地做分析

     命令:jmap -dump:format=b,file=heapdump.phrof  149992(jvm进程id)

    可以看到 我们的内存文件以 phrof结尾,已经下载到我们的C:UsersAdminstrator下

    3使用eclipse分析我们的内存文件,

    首先我们要下载一个eclipse软件  接下来我们要在eclipse软件中安装一个插件来分析,这个插件是 Eclipse Memory Analyzer(MAT),

    我们打开 eclipse 中工具栏的 Help-》Install New Software  如下图所示

     我们点击 Add按钮 输入以下配置

     经过一系列的安装,安装成功后 我们打开Memory Analysis 内存分析工具

     然后把我们的内存文件 拖拽到空白处如下图所示:

     会出现一个提示框  如下图:

    内存文件可视化图就出现了

     我们来了解一下底部的信息, 是什么意思 如何分析

    1.Histogram可以列出内存中的对象,对象的个数以及大小。
    2. Dominator Tree可以列出那个线程,以及线程下面的那些对象占用的空间。
    3.Top consumers通过图形列出最大的object。
    4.Leak Suspects通过MA自动分析泄漏的原因。

    分析:

    Histogram如下图:

    Objects:类的对象的数量;

    Shallow size:就是对象本身占用内存的大小,不包含对其他对象的引用,也就是对象头加成员变量(不是成员变量的值)的总和;

    Retained size:是该对象自己的shallow size,加上从该对象能直接或间接访问到对象的shallow size之和。换句话说,retained size是该对象被GC之后所能回收到内存的总和。

    4具体分析:

     4.1我们通过Histogram分析 可以看到这个对象占用了很多内存,空间

     4.2 我们通过线程分析Dominator Tree 可以看到线程当中占用最多的线程中的类

     4.3 我们通过 MA自动分析漏洞原因

     总结:

    ,com.lmax.disruptor.RingBuffer类来自于skyWalking jar包中

     导致内存过高,卸扣的是skyWalking

  • 相关阅读:
    C++ 多线程
    C++ 信号处理
    首页流量监控代码
    macro-name replacement-text 宏 调试开关可以使用一个宏来实现 do { } while(0)
    color depth 色彩深度 像素深度
    数据更新 数据同步 起始点 幂等同步历史数据
    获取当前调用函数名 方法名
    版本号风格为 Major.Minor.Patch
    query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max
    Cutoff frequency
  • 原文地址:https://www.cnblogs.com/langjunnan/p/15339103.html
Copyright © 2011-2022 走看看