Kwai によるモバイル プラットフォーム上の OOM キラー。
中文版请参看这里
KOOM はモバイル高性能オンライン メモリ監視ソリューションを作成し、OOM 関連の問題が検出されたときに詳細なレポートを提供し、Kwai アプリケーションの多数の OOM 問題を解決しました。現在Androidで利用できます。
モバイル端末のビジネス ロジックが複雑化し、4K コーデックや AR マジック ウォッチなどの高いメモリ要件を伴うシナリオが徐々に普及するにつれて、OOM 問題が Kuaishou クライアントの安定性管理における最大の問題となっています。毎日のバージョン反復プロセスでは、OOM サージが時々発生し、オンライン環境は非常に複雑です。何千もの AB 実験があります。事前予防と事後回復は不可能です。したがって、高性能のオンライン メモリ監視ソリューションが緊急に必要とされています。
では、OOM ガバナンスはどのように構築されるべきでしょうか?現在、KOOM は Java ヒープ/ネイティブ ヒープ/スレッドのリークを監視する機能を備えており、将来的には多次元およびマルチビジネス シナリオの監視を構築する予定です。
koom-java-leak
モジュールは、Java ヒープ リークの監視に使用されます。このモジュールは、コピーオンライト メカニズムを使用して、子プロセス ダンプ Java ヒープをフォークし、問題を解決します。ダンプ中にアプリが長時間フリーズします。詳細はこちらをご参照くださいkoom-native-leak
モジュールは、ネイティブ ヒープ リーク監視ソリューションです。トレーシング ガベージ コレクション メカニズムを使用してネイティブ ヒープ全体を分析し、次のようなリークしたメモリ情報を直接出力します。サイズ/スタックの割り当てなど。ビジネス学生のメモリ リークの分析と解決にかかるコストを大幅に削減します。詳細はこちらをご参照くださいkoom-thread-leak
モジュールは、スレッド リークの監視に使用されます。スレッドのライフサイクル機能をフックし、リークされたスレッド情報を定期的に報告します。詳細はこちらをご参照くださいすべてのネイティブ モジュールは、c++_shared と c++_static の 2 つのアクセス モードをサポートします。詳細については、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 をチェックしてください。
問題を報告するか、WeChat グループでご連絡ください。