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
欢迎举报问题或微信群联系我们。