KOOM
KOOM 2.2.2 Release
快手移動平台的OOM殺手。
中文版本請參看這裡
KOOM打造行動高效能線上記憶體監控解決方案,在偵測到OOM相關問題時提供詳細報告,並解決了快手應用程式中大量的OOM問題。目前可在Android上使用。
隨著行動端業務邏輯日益複雜,以及4K的編解碼、AR魔表等對記憶體要求較高的場景的逐漸普及,OOM問題已成為快手客戶端穩定性管理的第一大問題。在日常的版本迭代過程中,偶爾會出現OOM激增的情況,而且線上環境非常複雜。 AB 實驗有數千次。無法做到事前預防、事後恢復。因此,迫切需要高效能的線上記憶體監控解決方案。
那麼OOM治理該如何建構呢?目前KOOM已具備Java Heap/Native Heap/Thread洩漏監控能力,未來將建置多維度、多業務場景的監控。
koom-java-leak
模組用於Java Heap洩漏監控:它使用Copy-on-write機制來fork子程序轉儲Java Heap,解決了這個問題。該應用程式在轉儲期間會凍結很長時間。詳情請參考這裡koom-native-leak
模組是一個Native Heap洩漏監控解決方案:使用Tracing垃圾收集機制來分析整個Native Heap,並直接輸出洩漏的記憶體信息,例如:大小/分配堆疊/等;大大降低了商科學生分析和解決記憶體洩漏的成本。詳情請參考這裡koom-thread-leak
模組用於執行緒洩漏監控:它hook執行緒的生命週期函數,並定期報告洩漏的執行緒資訊。詳情請參考這裡所有 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
: 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
歡迎檢舉問題或微信群聯絡我們。