Ein OOM-Killer auf der mobilen Plattform von Kwai.
中文版本请参看这里
KOOM erstellt eine mobile, leistungsstarke Online-Speicherüberwachungslösung, die einen detaillierten Bericht liefert, wenn OOM-bezogene Probleme erkannt werden, und hat eine große Anzahl von OOM-Problemen in der Kwai-Anwendung gelöst. Es ist derzeit für Android verfügbar.
Mit der zunehmenden Komplexität der Geschäftslogik mobiler Endgeräte und der zunehmenden Beliebtheit von Szenarien mit hohem Speicherbedarf wie 4K-Codec und AR Magic Watch ist das OOM-Problem zum größten Problem im Stabilitätsmanagement des Kuaishou-Clients geworden. Im täglichen Versionsiterationsprozess kommt es gelegentlich zu OOM-Anstiegen und die Online-Umgebung ist sehr kompliziert. Es gibt Tausende von AB-Experimenten. Eine Vor-Prävention und eine Nach-Wiederherstellung können nicht erreicht werden. Daher sind leistungsstarke Online-Speicherüberwachungslösungen dringend erforderlich.
Wie sollte also die OOM-Governance aufgebaut sein? Derzeit ist KOOM in der Lage, Lecks von Java Heap/Native Heap/Thread zu überwachen und wird in Zukunft eine mehrdimensionale und geschäftsübergreifende Überwachungsszenarien aufbauen.
koom-java-leak
wird zur Überwachung von Java-Heap-Lecks verwendet: Es verwendet den Copy-on-Write-Mechanismus, um den untergeordneten Prozess-Dump Java Heap zu forken, wodurch das Problem gelöst wird. Die App friert während des Dumps für längere Zeit ein. Einzelheiten finden Sie hierkoom-native-leak
-Modul ist eine Lösung zur Überwachung von nativen Heap-Lecks: Verwenden Sie den Tracing-Garbage-Collection-Mechanismus, um den gesamten nativen Heap zu analysieren und die verlorenen Speicherinformationen direkt auszugeben, z. B.: Größe/Zuordnung von Stapeln/etc.; Reduziert die Kosten für die Analyse und Lösung von Speicherlecks für Wirtschaftsstudenten erheblich. Einzelheiten finden Sie hierkoom-thread-leak
-Modul wird zur Thread-Leck-Überwachung verwendet: Es bindet die Lebenszyklusfunktion des Threads ein und meldet regelmäßig die durchgesickerten Thread-Informationen. Einzelheiten finden Sie hier Alle nativen Module unterstützen zwei Zugriffsmodi: c++_shared und c++_static. Weitere Informationen finden Sie unter 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
zum Projektstammverzeichnis build.gradle hinzu: 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 steht unter der Apache-Lizenz 2.0. Einzelheiten finden Sie in der LIZENZ.
Weitere Informationen zum Änderungsverlauf finden Sie in CHANGELOG.md.
Wenn Sie daran interessiert sind, einen Beitrag zu leisten, schauen Sie sich die Seite CONTRIBUTING.md an
Melden Sie gerne Probleme oder kontaktieren Sie uns in der WeChat-Gruppe.