Memory Analyzer Tool 使用

       Печатается Источник: https://wensong.iteye.com/blog/1986449

       Совсем недавно было изучение горячего развертывания, горячие вопросы развертывания , связанные с относительно головной боли , чтобы проверить утечку памяти (Memory утечки), и , таким образом, в процессе исследований горячего развертывания, высыхает одну вещи , которая является проверкой утечки памяти.
       Когда проверка утечки памяти, большинство начал экспериментировать со своими собственными инструментами JDK , чтобы решить этот вопрос, по jstat и jmap, чтобы выяснить , есть ли утечка памяти , когда определено , есть утечка памяти существует, попробуйте пойти в поисках точки утечки памяти, найти простой использовать JDK инструмент сам по себе не обеспечивает хороший способ, я попытался jhat, нашел его слишком трудно проверить, а затем рекомендуется онлайновый инструмент сравнения я выбрал МХАТ (анализатор памяти инструмента).
       MAT затмение плагин, начал более быстро. Он может быстро анализировать файл дамп, вы можете визуально увидеть соответствующую информацию для каждой эталонного объекта взаимосвязи между количеством размера занимаемой памяти и количеством экземпляров класса, объектом, найти объект GC Roots, в дополнении также генерирует память утечка отчет, большой объект подозревается в разглашении отчета и так далее.

  • Установка MAT
  • Вы можете выбрать затмить установлен плагин
    • http://download.eclipse.org/mat/1.3/update-site/
  • Вы также можете загрузить и установить отдельную программу МПТ
    • http://www.eclipse.org/mat/downloads.php
  • Используйте проверку MAT из памяти
    • Генерация дампа
  • Создание файла дампа может быть использован непосредственно jmap -dump: Формат = Ь, файл = xxx.bin $ {PID} способом
  • MAT также может быть использован для создания прямой, File- «Приобретать Heap Dump -» выбрать для дампа процесса Java - «закончить на нем
  • После генерации дампа, может быть открыт MAT дампа (если анализируется автоматически после того, как будет сбрасывать MAT), Файл- «Открыть дамп кучи на свалку файл анализируется, чтобы сгенерировать окончательный вид Обзор, эта цифра представляет собой схематический вид, показывающий Некоторые статистические данные, в том числе количества всего размера размера, номер класса, а также объекты, также будут генерировать большой объект на фигах сверху, а линия показывает большой процент памяти, занимаемый объект.
    • 类似: Размер: 2.2MB Классы: 3.3K объектов: 50.1k ClassLoader: 84 Недоступные объекты Гистограмма
    • Определение переполнения источника
      • Вид гистограммы (скриншот столп, что край является Dominator Tree): Списки каждого класса было несколько экземпляров, и занимает много памяти, процент
        • Вы можете легко узнать память станции до нескольких классов, в соответствии с Нераспределенным кучного родом, чтобы найти первые несколько.
        • Размеры могут быть разделены на различные классы зрения Гистограммы для просмотра, групп по классам, Группа по суперклассу, Группе по загрузчику класса, групп по упаковке
        • Пока происходит переполнение, с течением времени, количество экземпляров класса или увлекают его владении больше и больше памяти, больше и больше его рейтинг раньше, много раз сравнительной таблицы сравнения Гистограммы в различные моменты времени могут быть очень легко переполнить класс чтобы узнать.


        •  
        • Dominator Дерево (доминирующее дерево): списки каждого объект (экземпляр объекта) и его опорное дерево отношение, содержат также занимают много памяти, процент
  • Вы можете легко найти памяти до нескольких объектов, в зависимости от процента (в процентах) для сортировки.
  • Она может быть разделена на разные размеры, чтобы просматривать объекты Dominator Tree View, Группы по классам, Группа по загрузчику класса, группы от пакета
  • 和Histogram类似,时间久了,通过多次对比也可以把溢出对象找出来,Dominator Tree和Histogram的区别是站的角度不一样,Histogram是站在类的角度上去看,Dominator Tree是站的对象实例的角度上看,Dominator Tree可以更方便的看出其引用关系。


  •  
    • 定位溢出的原因
      • 通过Path to GC Roots或者Merge Shortest Paths to GC Roots


      •  
  • 通 过Histogram视图或者Dominator Tree视图,找到疑似溢出的对象或者类后,选择Path to GC Roots或者Merge Shortest Paths to GC Roots,这里有很多过滤选项,一般来讲可以选择exclude all plantom/weak/soft etc. references。这样就排除了虚引用、弱引用、以及软引用,剩下的就是强引用。从GC上说,除了强引用外,其他的引用在JVM需要的情况下是都可以 被GC掉的,如果一个对象始终无法被GC,就是因为强引用的存在,从而导致在GC的过程中一直得不到回收,因此就内存溢出了。
  • 接下来就需要直接定位具体的代码,看看如何释放这些不该存在的对象,比如是否被cache住了,还是其他什么原因。
  • 找到原因,清理干净后,再对照之前的操作,看看对象是否还再持续增长,如果不在,那就说明这个溢出点被成功的堵住了。
  • 最后用jstat跟踪一段时间,看看Old和Perm区的内存是否最终稳定在一个范围内,如果长时间稳定在一个范围,那溢出的问题就解决了,如果还再继续增长,那继续用上述方法,看看是否存在其他代码的溢出点,继续找出,将其堵住。


  •  

     
  • 此外通过list objects或show objects by class也可以达到类似的效果,不过没看GC Roots的方式直观,这里就不细说了。
  • list objects -- with outgoing references : 查看这个对象持有的外部对象引用。
  • list objects -- with incoming references : 查看这个对象被哪些外部对象引用。
  • show objects by class  --  with outgoing references :查看这个对象类型持有的外部对象引用
  • show objects by class  --  with incoming references :查看这个对象类型被哪些外部对象引用  

рекомендация

отwww.cnblogs.com/share2perfect/p/10990729.html