1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-KOOM

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.zh-CN.md 7.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 09:21 dfaf295

OOMMonitor: введение

OOMMonitor — это инструмент для мониторинга утечек памяти в приложениях на Java. Его основной принцип работы заключается в следующем:

  • периодически запрашивать информацию о состоянии ресурсов, таких как память кучи, количество потоков и количество дескрипторов файлов;
  • при многократном превышении установленного порога или резком быстром превышении высокого порога запускать сбор зеркального изображения.

Сбор зеркальных изображений осуществляется с использованием стратегии «виртуальная машина suspend → fork процесса виртуальной машины → виртуальная машина resume → дамп зеркального образа памяти». Это позволяет сократить время заморозки традиционного дампа с 20 секунд до менее чем 20 миллисекунд.

На основе анализа зеркальных образов с помощью инструмента Shark были внесены ряд изменений для повышения производительности. На мобильных устройствах можно выполнять автономный анализ утечек памяти и поиск ссылочных цепочек, а также создавать аналитические отчёты.

Область применения OOMMonitor

  • Android L и выше (API level >= 21).
  • Поддерживает архитектуры armeabi-v7a, arm64-v8a, x86 и x86-64.

Подключение к OOMMonitor

Зависимости:

  • В файле build.gradle корневого каталога проекта добавьте mavenCentral().
repositories {
    mavenCentral()
}
  • В файл app/build.gradle проекта добавьте зависимость.
dependencies {
  implementation "com.kuaishou.koom:koom-java-leak:${latest_version}"
}

Использование:

  • Инициализируйте MonitorManager.
  • Инициализируйте OOMMonitor. Можно настроить множество параметров и получить аналитический отчёт.
  • Запустите OOMMonitor, чтобы начать периодический мониторинг утечек.
  • Обычно не требуется останавливать OOMMonitor вручную.

Для проверки журналов настройте опрос и следите за следующими сообщениями:

  • OOMMonitor: startLoop() — начало опроса.
  • OOMMonitor_ThreadOOMTracker: [meet condition] overThresholdCount:1, threadCount: 717 — превышение порога.
  • OOMMonitor: dumpAndAnalysis — запуск сбора зеркального образа для анализа.
  • OOMMonitor: end hprof dump — завершение сбора зеркального образа.
  • OOMMonitor: start hprof analysis — начало анализа зеркального образа.
  • OOMMonitor: heap analysis success, do upload — анализ зеркального образа завершён успешно, можно загрузить результаты.

Часто задаваемые вопросы об OOMMonitor

Как влияет OOMMonitor на производительность?

  • Сбор зеркальных образов больше не блокирует выполнение основного процесса, поэтому этим влиянием можно пренебречь.
  • Время, затрачиваемое на сбор зеркальных образов и их анализ дочерним процессом, может достигать трёх минут и более, что занимает один поток. Объём используемой памяти обычно составляет менее 200 МБ.
  • Рекомендуется использовать удалённый механизм переключения, который позволяет выборочно активировать сбор данных.

Как определяется утечка?

  • Для Activity и Fragment, если объект уже уничтожен, но всё ещё имеет ссылку на него из GC Root, считается, что объект просочился.
  • Правила определения уничтожения Activity: mFinished или mDestroyed равно true.
  • Правила определения уничтожения Fragment: mFragmentManager пуст и mCalled равно true, где mCalled указывает, что фрагмент прошёл через некоторые жизненные циклы.

Как обрезать зеркальный образ? Используйте ForkStripHeapDumper.getInstance().dump(path).

Как восстановить обрезанный зеркальный образ, чтобы AS Profiler/MAT мог его открыть?

  • Получите обрезанный зеркальный образ.
adb shell "run-as com.kwai.koom.demo cat 'files/test.hprof'" > ~/temp/test.hprof
  • Используйте koom-fill-crop.jar для восстановления обрезанного зеркального образа.
java -jar koom-fill-crop.jar test.hprof

Как понять ссылочные цепочки в аналитическом отчёте?

  • Сначала ознакомьтесь с комментариями в HeapReport.java.
  • Ссылка: за исключением массивов, все они состоят из комбинации имени класса и имени поля, где поле принадлежит этому классу и содержит ссылки. Ссылочная цепочка представляет собой отношение, в котором объект верхнего уровня в цепочке владеет экземпляром этого поля или объявлением статического поля.
  • ReferenceType: представляет тип ссылки, который может быть одним из следующих:
    • INSTANCE_FIELD: ссылка на экземпляр обычного поля. Обычно это новый объект, назначенный через знак равенства.
    • ARRARY_ENTRY: ссылка на элемент массива.
    • STATIC_FIELD: ссылка на статическое поле класса.
  • DeclaredClass: поле не обязательно объявлено непосредственно в классе. Поле также может быть унаследовано от родительского класса. DeclaredClass представляет класс, которому принадлежит это поле.

Как анализировать и объединять запутанные классы в отчётах?

  • Эта часть кода не является открытой. Рекомендуется обратиться к APM бэкэнду каждой компании.
  • Деобфускацию можно выполнить с помощью функции ReTrace инструмента progurad.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-KOOM.git
git@api.gitlife.ru:oschina-mirror/mirrors-KOOM.git
oschina-mirror
mirrors-KOOM
mirrors-KOOM
master