Um assassino OOM na plataforma móvel da Kwai.
中文版本请参看这里
KOOM cria uma solução móvel de monitoramento de memória on-line de alto desempenho, que fornece um relatório detalhado quando problemas relacionados ao OOM são detectados e resolveu um grande número de problemas de OOM no aplicativo Kwai. Atualmente está disponível no Android .
Com a crescente complexidade da lógica de negócios do terminal móvel e a popularidade gradual de cenários com altos requisitos de memória, como codec 4K e relógio mágico AR, o problema OOM tornou-se o problema número um no gerenciamento de estabilidade do cliente Kuaishou. No processo de iteração diária da versão, ocorrem ocasionalmente picos de OOM e o ambiente online é muito complicado. Existem milhares de experimentos AB. A pré-prevenção e a pós-recuperação não podem ser alcançadas. Portanto, soluções de monitoramento de memória online de alto desempenho são urgentemente necessárias.
Então, como deve ser construída a governação do OOM? Atualmente, o KOOM tem a capacidade de monitorar vazamentos de Java Heap/Native Heap/Thread e construirá monitoramento de cenários multidimensionais e multinegócios no futuro.
koom-java-leak
é usado para monitoramento de vazamento de Java Heap: ele usa o mecanismo Copy-on-write para bifurcar o dump do processo filho Java Heap, o que resolve o problema. O aplicativo congela por muito tempo durante o despejo. Para obter detalhes, consulte aquikoom-native-leak
é uma solução de monitoramento de vazamento de Heap Nativo: use o mecanismo de coleta de lixo Tracing para analisar todo o Heap Nativo e gerar diretamente as informações de memória vazadas, como: tamanho/Alocação de pilhas/etc.; reduz bastante o custo de análise e solução de vazamentos de memória para estudantes de administração. Para obter detalhes, consulte aquikoom-thread-leak
é usado para monitoramento de vazamento de thread: ele conecta a função do ciclo de vida do thread e relata periodicamente as informações do thread vazado. Para obter detalhes, consulte aqui Todos os módulos nativos suportam dois modos de acesso, c++_shared e c++_static. Para obter detalhes, consulte suporte cpp.
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
no diretório raiz do projeto 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 está sob a licença Apache 2.0. Para detalhes confira a LICENÇA.
Confira o CHANGELOG.md para obter detalhes do histórico de alterações.
Se você estiver interessado em contribuir, confira CONTRIBUTING.md
Bem-vindo, relate problemas ou entre em contato conosco no grupo WeChat.