Убийца ООМ на мобильной платформе от Kwai.
中文版本请参看这里
KOOM создает высокопроизводительное мобильное решение для онлайн-мониторинга памяти, которое предоставляет подробный отчет при обнаружении проблем, связанных с OOM, и решает большое количество проблем OOM в приложении Kwai. В настоящее время оно доступно на Android .
С ростом сложности бизнес-логики мобильных терминалов и постепенной популярностью сценариев с высокими требованиями к памяти, таких как кодек 4K и волшебные часы AR, проблема OOM стала проблемой номер один в управлении стабильностью клиента Kuaishou. В процессе ежедневной итерации версий иногда случаются всплески OOM, и онлайн-среда очень сложна. Существуют тысячи экспериментов AB. Предварительная профилактика и последующее восстановление не могут быть достигнуты. Поэтому остро необходимы высокопроизводительные решения для онлайн-мониторинга памяти.
Так как же должно быть построено управление OOM? В настоящее время KOOM имеет возможность отслеживать утечки Java Heap/Native Heap/Thread и в будущем будет создавать мониторинг многомерных и многобизнес-сценариев.
koom-java-leak
используется для мониторинга утечек Java Heap: он использует механизм копирования при записи для разветвления дампа дочернего процесса Java Heap, что решает проблему. Во время дампа приложение надолго зависает. Подробную информацию см. здесь.koom-native-leak
— это решение для мониторинга утечек Native Heap: используйте механизм сбора мусора Tracing для анализа всей Native Heap и напрямую выводите информацию об утечке памяти, например: размер/распределение стеков/и т. д.; значительно снижает затраты на анализ и устранение утечек памяти для студентов-бизнесменов. Подробную информацию см. здесь.koom-thread-leak
используется для мониторинга утечек потоков: он перехватывает функцию жизненного цикла потока и периодически сообщает об утечке информации о потоке. Подробную информацию см. здесь. Все модули Native поддерживают два режима доступа: c++_shared и c++_static. Для получения подробной информации обратитесь к cpp-support.
dependencies {
// In shared mode, multiple modules share the same libc++_shared.so (STL), and the package
// size is small, but when multiple modules depend on different STL versions, the final
// compilation will conflict. For example, you might get "dlopen failed: cannot locate symbol
// "__emutls_get_address" referenced by" errors.
implementation " com.kuaishou.koom:koom-java-leak: ${ latest_version } "
// Or in static mode, each module has its own STL, the package size is large, and there are no
// compilation and runtime problems.
implementation " com.kuaishou.koom:koom-java-leak-static: ${ latest_version } "
// If you depend on multiple modules, the shared and static modes cannot be mixed.
// The following way is wrong, remember!
implementation " com.kuaishou.koom:koom-java-leak-static: ${ latest_version } "
implementation " com.kuaishou.koom:koom-monitor-base: ${ latest_version } "
}
pickFirst
в корневой каталог проекта build.gradle: packagingOptions {
// Select the first libc++_shared.so when packaging apk, it may encounter unpredictable bugs
// at runtime, use it with caution!
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. Подробности смотрите в ЛИЦЕНЗИИ.
Посетите CHANGELOG.md для получения подробной информации об истории изменений.
Если вы заинтересованы в участии, посетите CONTRIBUTING.md.
Добро пожаловать, сообщите о проблемах или свяжитесь с нами в группе WeChat.