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

OSCHINA-MIRROR/mirrors-KOOM

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

ThreadLeakMonitor: введение

Используется для мониторинга проблем с утечкой потоков в приложении. Основной принцип работы:

  • перехват методов pthread_create, pthread_exit и других, связанных с потоками, для записи информации о жизненном цикле потока, стеке создания и т. д.;
  • при обнаружении joinable-потока, который выполнил pthread_exit без вызова detach или join, информация об утечке потока записывается;
  • когда время утечки потока достигает установленного значения задержки, информация об утечке потока отправляется наверх.

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

  • Android N и выше (API level >= 24);
  • поддерживается только архитектура arm64-v8a.

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

  1. Конфигурация зависимостей:

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

    • инициализируйте MonitorManager;
    • поскольку ThreadLeakMonitor зависит от MonitorManager, убедитесь, что MonitorManager уже инициализирован;
    • создайте конфигурацию для монитора:
      val config = ThreadMonitorConfig.Builder()
              .enableThreadLeakCheck(30 * 1000L, 60 * 1000L) // устанавливаем интервал опроса равным 30 с, а задержку обнаружения утечки потока — 1 мин
              .setListener(listener)
              .build()
      MonitorManager.addMonitorConfig(config)
    • запустите монитор для периодического обнаружения утечек:
      ThreadMonitor.startTrackAsync()
    • остановите монитор (обычно не требуется):
      ThreadMonitor.stop()
    • в ThreadLeakListener обрабатывайте полученные данные об утечках:
      val listener = object : ThreadLeakListener {
           override fun onReport(leaks: MutableList<ThreadLeakRecord>) {
              leaks.forEach {
                 MonitorLog.i(ThreadLeakTestActivity.LOG_TAG, it.toString())
              }
           }
           override fun onError(msg: String) {
              MonitorLog.e(ThreadLeakTestActivity.LOG_TAG, msg)
           }
      }

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

— Почему не поддерживается оборудование ниже Android N? — Учитывая потери производительности при мониторинге потоков и общие проблемы с потоками, мониторинг устройств выше Android N должен решить большинство проблем.

— Почему не поддерживается armeabi-v7a? — При получении стека распределения памяти мы использовали FP Unwind (frame pointer unwind). В armeabi-v7a используется смешанный набор инструкций ARM/Thumb, и FP Unwind ненадёжен на стеке смешанных инструкций ARM/Thumb. Кроме того, AArch32 (Arm 32-bit Architecture) ABI не определяет поведение FP.

Опубликовать ( 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