فهم مشاكل ذاكرة Android وتحديدها وحلّها

الذاكرة هي مورد مهم ومحدود على الأجهزة التي تعمل بنظام التشغيل Android. بصفتك مطوّرًا أو مصنّع أجهزة أصلية لنظام Android الأساسي، من الضروري فهم طريقة عمل الذاكرة على كل مستوى، بدءًا من وقت تشغيل Java وصولاً إلى نواة Linux، وذلك لإنشاء نظام مستقر وعالي الأداء.

يقدّم هذا الدليل نظرة عامة شاملة على بنية الذاكرة في Android والأدوات المتاحة للتحليل والتمارين العملية لمساعدتك في تحديد المشاكل المتعلّقة بالذاكرة وحلّها.

الأهداف

بعد إكمال هذا الدليل، ستتمكّن من:

  • شرح المفاهيم الأساسية المتعلقة بذاكرة Android، بما في ذلك نموذج عملية Zygote والملفات التي يتم ربطها بالذاكرة
  • التمييز بين حجم مجموعة البيانات المقيمة (RSS) وحجم مجموعة البيانات النسبية (PSS) وحجم مجموعة البيانات الفريدة (USS)
  • استخدِم أدوات سطر الأوامر العادية، مثل dumpsys meminfo وshowmap، لتقييم استخدام الذاكرة بسرعة.
  • يمكنك تسجيل وتحليل عمليات تفريغ الذاكرة المؤقتة في Java باستخدام أداة AHAT للعثور على تسرّبات وعمليات تخصيص مفرطة.
  • استخدِم Perfetto وheapprofd لإنشاء ملفات تعريف لكل من ذاكرة Java والذاكرة الأصلية على مستوى النظام بأكمله.
  • يمكنك فهم مؤشرات ضغط الذاكرة على مستوى النظام، مثل معلومات Pressure Stall Information (PSI)، وتتبُّع نشاط Low Memory Killer (LMK).
  • مراقبة نشاط الاسترداد على مستوى النواة، بما في ذلك مبادلة ZRAM وإزالة ذاكرة التخزين المؤقت للصفحات

بنية الدليل

تم تنظيم هذا الدليل في الأقسام التالية، والتي تم تصميمها ليتم قراءتها بالتسلسل:

  1. المفاهيم الأساسية: المبادئ الفنية الأساسية المتعلقة بذاكرة Android
  2. أدوات التقييم السريع: استخدام meminfo وshowmap وprocstats لإجراء تقييم سريع.
  3. تحليل ذاكرة Java: معلومات مفصّلة حول ذاكرة Java المؤقتة باستخدام أداة AHAT
  4. الصور النقطية والذاكرة: التعرّف على كيفية تأثير الصور في ذاكرة الوصول العشوائي (RAM) واستخدام الأدوات لإنشاء ملفات تعريف لها
  5. تحليل الذاكرة الأصلية: تحديد مواضع الخلل في ذاكرة C/C++ باستخدام Perfetto وheapprofd
  6. WebView والذاكرة: فهم بنية العمليات المتعددة واستهلاك الذاكرة لمكوّنات WebView
  7. رمز التطبيق هو الذاكرة: فهم كيفية تأثير تحميل الفئات وتضخّم ملف dex في ذاكرة الوصول العشوائي
  8. سلاسل التنفيذ والذاكرة: تحليل تكلفة حِزم سلاسل التنفيذ الأصلية
  9. موضع البيانات في الذاكرة والأداء: فهم كيفية تأثير أنماط الوصول إلى البيانات في أداء وحدة المعالجة المركزية
  10. عمليات الربط بالخدمات وحالات العمليات: فهم كيفية تأثير التبعيات بين العمليات في نتائج OOM
  11. تحديد المشاكل وحلّها على مستوى النظام: مراقبة مؤشر PSI، وLMK، ومساحة التبديل ZRAM، وإزالة بيانات ذاكرة التخزين المؤقت للصفحات
  12. استعادة الذاكرة: الإخلاء والمبادلة: فهم memcg، والرسوم، والاستعادة الاستباقية باستخدام memory.reclaim
  13. التفاعل بين kswapd وlmkd: فهم كيفية عمل kswapd وlmkd معًا تحت الضغط

المتطلبات الأساسية والبيئة

يعرض هذا الدليل نماذج لسير العمل وقياسات أداء ودراسات حالة توضّح كيفية تشخيص مشاكل الذاكرة في Android وحلّها.

  • أدوات التحليل: تستخدم التقنيات الواردة في هذا الدليل بشكل أساسي أدوات أداء Android العادية، بما في ذلك Perfetto وdumpsys meminfo وshowmap وAHAT.
  • امتيازات الجذر: تتطلّب بعض عمليات التشخيص على مستوى النظام (مثل فحص ضغط ذاكرة النواة أو عدّادات وحدة إدارة الطاقة (PMU) للأجهزة) امتيازات جذر مرتفعة (adb root) على جهاز أو محاكي userdebug.

البدء من هنا: المفاهيم الأساسية