Un asesino de OOM en plataforma móvil de Kwai.
中文版本请参看这里
KOOM crea una solución móvil de monitoreo de memoria en línea de alto rendimiento, que proporciona un informe detallado cuando se detectan problemas relacionados con OOM y ha resuelto una gran cantidad de problemas de OOM en la aplicación Kwai. Actualmente está disponible en Android .
Con la creciente complejidad de la lógica empresarial de los terminales móviles y la popularidad gradual de escenarios con altos requisitos de memoria, como el códec 4K y el reloj mágico AR, el problema OOM se ha convertido en el problema número uno en la gestión de estabilidad del cliente Kuaishou. En el proceso diario de iteración de la versión, ocasionalmente se producen aumentos repentinos de OOM y el entorno en línea es muy complicado. Hay miles de experimentos AB. No es posible lograr la preprevención y la posrecuperación. Por lo tanto, se necesitan con urgencia soluciones de monitoreo de memoria en línea de alto rendimiento.
Entonces, ¿cómo debería construirse la gobernanza de OOM? En la actualidad, KOOM tiene la capacidad de monitorear las fugas de Java Heap/Native Heap/Thread, y construirá escenarios de monitoreo multidimensionales y multinegocios en el futuro.
koom-java-leak
se utiliza para el monitoreo de fugas de Java Heap: utiliza el mecanismo de copia en escritura para bifurcar el volcado del proceso secundario Java Heap, lo que resuelve el problema. La aplicación se congela durante mucho tiempo durante el volcado. Para más detalles, consulte aquíkoom-native-leak
es una solución de monitoreo de fugas de Native Heap: use el mecanismo de recolección de basura de seguimiento para analizar todo el Native Heap y genere directamente la información de la memoria filtrada como: tamaño/Asignación de pilas/etc.; Reduce en gran medida el costo de analizar y resolver pérdidas de memoria para estudiantes de negocios. Para más detalles, consulte aquíkoom-thread-leak
se utiliza para el monitoreo de fugas de subprocesos: conecta la función del ciclo de vida del subproceso e informa periódicamente la información del subproceso filtrado. Para más detalles, consulte aquí Todos los módulos nativos admiten dos modos de acceso, c++_shared y c++_static. Para obtener más información, consulte 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
en el directorio raíz del proyecto 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á bajo la licencia Apache 2.0. Para más detalles consulte la LICENCIA.
Consulte CHANGELOG.md para obtener detalles sobre el historial de cambios.
Si está interesado en contribuir, consulte CONTRIBUTING.md
Bienvenido, informe problemas o contáctenos en el grupo WeChat.