KOOM
OOM-киллер от Kwai для мобильной платформы.
中文版本请参看这里
KOOM — это высокопроизводительное решение для мониторинга памяти в режиме онлайн, которое предоставляет подробный отчёт при обнаружении проблем, связанных с OOM (нехваткой памяти). Оно уже решило большое количество проблем с OOM в приложении Kwai и на данный момент доступно на Android.
Из-за растущей сложности бизнес-логики мобильных терминалов и постепенного распространения сценариев с высокими требованиями к памяти, таких как кодек 4K и AR Magic Watch, проблема OOM стала главной проблемой в управлении стабильностью клиента Kuaishou. В процессе ежедневной итерации версий иногда возникают всплески OOM, а онлайн-среда очень сложна. Существует тысячи AB-экспериментов. Предотвращение и восстановление после сбоев невозможны. Поэтому срочно необходимы высокопроизводительные решения для мониторинга памяти в реальном времени.
Как построить управление OOM? На данный момент KOOM может отслеживать утечки Java Heap/Native Heap/Thread и в будущем будет создавать многомерные и мультибизнес-сценарии мониторинга.
koom-java-leak
используется для мониторинга утечек Java Heap: он использует механизм Copy-on-write для разветвления дочернего процесса дампа Java Heap, что решает проблему. Приложение надолго зависает во время дампа. Для получения более подробной информации см. здесь.koom-native-leak
представляет собой решение для мониторинга Native Heap утечек: он использует механизм Tracing garbage collection для анализа всей Native Heap и напрямую выводит информацию об утечке памяти, такую как размер/выделение стеков и т. д.; значительно снижает затраты на анализ и устранение утечек памяти для бизнес-студентов. Для получения дополнительной информации см. здесь.koom-thread-leak
используется для отслеживания утечек Thread: он перехватывает функцию жизненного цикла потока и периодически сообщает об утечках потока. Для получения подробной информации см. здесь.Все модули Native поддерживают два режима доступа: c++_shared и c++_static. Для получения дополнительных сведений см. cpp-support.
dependencies {
// В общем режиме несколько модулей совместно используют один и тот же libc++_shared.so (STL), и размер пакета невелик, но когда несколько модулей зависят от разных версий STL, окончательная компиляция будет конфликтовать. Например, вы можете получить ошибки «dlopen failed: cannot locate symbol
// "__emutls_get_address" referenced by».
implementation "com.kuaishou.koom:koom-java-leak:${latest_version}"
// Или в статическом режиме каждый модуль имеет свой собственный STL, размер пакета большой, и нет проблем с компиляцией и временем выполнения.
implementation "com.kuaishou.koom:koom-java-leak-static:${latest_version}"
// Если вы зависите от нескольких модулей, общий и статический режимы не могут быть смешаны. Следующий способ неверен, помните!
implementation "com.kuaishou.koom:koom-java-leak-static:${latest_version}"
implementation "com.kuaishou.koom:koom-monitor-base:${latest_version}"
}
pickFirst
в корневой каталог проекта build.gradle:packagingOptions {
// Выберите первый libc++_shared.so при упаковке apk, это может привести к непредсказуемым ошибкам во время выполнения, используйте его с осторожностью!
pickFirst 'lib/*/libc++_shared.so'
}
<uses-sdk tools:overrideLibrary="com.kwai.koom.fastdump, com.kwai.android.base, com.kwai.koom.base" />
KOOM находится под лицензией Apache 2.0. Подробности смотрите в LICENSE.
Подробности истории изменений смотрите в CHANGELOG.md.
Если вы хотите внести свой вклад, ознакомьтесь с CONTRIBUTING.md.
Добро пожаловать в отчёт об проблемах или свяжитесь с нами в группе WeChat.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )