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

OSCHINA-MIRROR/mirrors-KOOM

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

Введение в ThreadLeakMonitor

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

  • Перехват pthread_create/pthread_exit и других методов потока для записи жизненного цикла потока и создания стека, имени и другой информации.
  • При обнаружении того, что присоединяемый поток выполняет pthread_exit без отсоединения или соединения, записывается информация об утечке потока.
  • Когда время утечки потока достигает установленного конфигурацией периода задержки, сообщается информация об утечке потока.

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

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

Доступ к ThreadLeakMonitor:

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

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

  1. Инициализировать MonitorManager. Поскольку ThreadLeakMonitor зависит от MonitorManager, убедитесь, что MonitorManager был инициализирован.
  2. Инициализировать монитор:
val config = ThreadMonitorConfig.Builder()
        .enableThreadLeakCheck(30 * 1000L, 60 * 1000L) // Установить интервал опроса равным 30 с, а период задержки утечки потока — 1 мин.
        .setListener(listener)
        .build()
MonitorManager.addMonitorConfig(config)
  1. Запустить мониторинг и начать периодическое обнаружение утечек:
ThreadMonitor.startTrackAsync()
  1. Остановить мониторинг, обычно активно останавливать не требуется:
ThreadMonitor.stop()
  1. Вызвать обратный вызов в 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. — ABI AArch32 (Arm 32-bit Architecture) также не определяет поведение 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