قاتل OOM على منصة الهاتف المحمول بواسطة Kwai.
中文版本请参看这里
تقوم KOOM بإنشاء حل لمراقبة الذاكرة عبر الإنترنت عالي الأداء على الأجهزة المحمولة، والذي يوفر تقريرًا تفصيليًا عند اكتشاف المشكلات المتعلقة بـ OOM، كما قام بحل عدد كبير من مشكلات OOM في تطبيق Kwai. وهو متوفر حاليًا على نظام Android .
مع التعقيد المتزايد لمنطق أعمال المحطات المتنقلة والشعبية التدريجية للسيناريوهات ذات متطلبات الذاكرة العالية مثل برنامج الترميز 4K والساعة السحرية AR، أصبحت مشكلة OOM هي المشكلة الأولى في إدارة استقرار عميل Kuaishou. في عملية التكرار اليومية للإصدار، تحدث زيادات OOM أحيانًا، وتكون البيئة عبر الإنترنت معقدة للغاية. هناك الآلاف من تجارب AB. لا يمكن تحقيق الوقاية المسبقة وما بعد التعافي. ولذلك، هناك حاجة ماسة إلى حلول مراقبة الذاكرة عبر الإنترنت عالية الأداء.
إذن كيف ينبغي بناء حوكمة OOM؟ في الوقت الحاضر، تتمتع KOOM بالقدرة على مراقبة تسرب Java Heap/Native Heap/Thread، وستقوم ببناء سيناريوهات متعددة الأبعاد ومتعددة الأعمال للمراقبة في المستقبل.
koom-java-leak
لمراقبة تسرب Java Heap: فهي تستخدم آلية النسخ عند الكتابة لتفرع عملية تفريغ Java Heap، مما يحل المشكلة. يتجمد التطبيق لفترة طويلة أثناء التفريغ. لمزيد من التفاصيل، يرجى الرجوع إلى هناkoom-native-leak
هي حل لمراقبة تسرب الكومة الأصلية: استخدم آلية جمع البيانات المهملة لتحليل الكومة الأصلية بأكملها، وإخراج معلومات الذاكرة المسربة مباشرة مثل: الحجم/تخصيص المكدسات/وما إلى ذلك؛ يقلل بشكل كبير من تكلفة تحليل وحل تسرب الذاكرة لطلاب الأعمال. لمزيد من التفاصيل، يرجى الرجوع إلى هناkoom-thread-leak
لمراقبة تسرب الخيط: فهي تربط وظيفة دورة حياة الخيط، وتقوم بالإبلاغ بشكل دوري عن معلومات الخيط المسربة. لمزيد من التفاصيل، يرجى الرجوع إلى هنا تدعم كافة الوحدات الأصلية وضعي وصول، c++_shared وc++_static. لمزيد من التفاصيل، يرجى الرجوع إلى دعم CPP.
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
في الدليل الجذر للمشروع 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 تحت ترخيص Apache 2.0. للحصول على التفاصيل تحقق من الترخيص.
قم بمراجعة CHANGELOG.md للحصول على تفاصيل حول سجل التغيير.
إذا كنت مهتمًا بالمساهمة، قم بزيارة CONTRIBUTING.md
نرحب بمشاكل الإبلاغ أو اتصل بنا في مجموعة WeChat.