استخدام الذاكرة (ذاكرة RSS المجهولة + مساحة الإبدال)

استخدام الذاكرة (ذاكرة RSS المجهولة + مساحة الإبدال) هو مقياس في مؤشرات Android الحيوية يعكس استخدام تطبيقك للذاكرة.

الذاكرة المجهولة هي ذاكرة غير مدعومة بملف على مساحة التخزين، مثل عمليات تخصيص الذاكرة المؤقتة والذاكرة المخصّصة باستخدام mmap. ويشمل ذلك عمليات تخصيص الذاكرة الديناميكية في تطبيقك، بما في ذلك الذاكرة المؤقتة في Java أو Kotlin، وعمليات تخصيص الذاكرة المؤقتة الأصلية غير المُدارة (حيث توجد بيانات وحدات البكسل في الصورة النقطية على Android 8.0 (مستوى واجهة برمجة التطبيقات 26) والإصدارات الأحدث)، ومكدّسات تنفيذ سلسلة المحادثات. يمكن لنظام التشغيل إزالة الذاكرة المدعومة بملف عند ضغط الذاكرة، ولكن لا يمكنه إزالة الذاكرة المجهولة.

يشير مقياس Resident Set Size (RSS) إلى إجمالي عدد صفحات الذاكرة (المشترَكة وغير المشترَكة) التي يستخدمها أحد العمليات والمخزّنة في ذاكرة الوصول العشوائي (RAM) الفعلية. تُعد الصفحة "مشترَكة" إذا كان بإمكان أكثر من عملية الوصول إليها (مثل التطبيقات التي تصل إلى المكتبة نفسها).

بالنسبة إلى الذاكرة المجهولة، يمكن للنظام كتابة الصفحات إلى مساحة الإبدال (أو zRAM على Android) عند ضغط الذاكرة. ويمكن للنظام قراءة هذه الصفحات مرة أخرى من مساحة الإبدال إذا لزم الأمر.

بشكل عام، يشير مقياس استخدام الذاكرة (ذاكرة RSS المجهولة + مساحة الإبدال) إلى إجمالي عدد صفحات الذاكرة في تطبيقك غير المدعومة بملف على مساحة التخزين، بما في ذلك أي ذاكرة يحتفظ بها النظام أيضًا في مساحة الإبدال. يضمن تتبُّع ذاكرة RSS المجهولة + مساحة الإبدال عرض استهلاك الذاكرة الفعلي غير القابل للإزالة في تطبيقك.

إذا كان استخدام تطبيقك للذاكرة مرتفعًا، يمكنك إجراء تحقيق إضافي وحلّ المشكلة باستخدام الإرشادات الواردة في هذه الصفحة.

تحديد حالات استخدام الذاكرة بشكل كبير

مؤشرات Android الحيوية

تعرض مؤشرات Android الحيوية استخدام تطبيقك للذاكرة مقسّمًا حسب حالات العملية التالية:

  • في المقدّمة: تكون عملية التطبيق مرئية. غالبًا ما يؤثر ارتفاع قيمة P99 هنا في الأداء الذي يلاحظه المستخدم (إيقاف مؤقت لعرض واجهة المستخدم أو تعطُّل بسبب نفاد الذاكرة)، ويرجع ذلك بشكل كبير إلى مكوّنات واجهة المستخدم أو الأنشطة غير القابلة للإزالة.
  • خدمة تعمل في المقدّمة: يشغّل التطبيق خدمة تعمل في المقدّمة. بما أنّ هذه الخدمات مصمّمة للمهام الطويلة الأمد، فهي مرشّحة أساسية لحدوث تسرّبات تراكمية في دورة الحياة تؤدي إلى زيادة كبيرة في قيمة P99 بمرور الوقت.
  • في الخلفية: يشغّل التطبيق خدمة تُشغَّل في الخلفية، أو تم نقله مؤخرًا إلى الخلفية ، ولكن لم يتم تخزينه مؤقتًا بعد. هنا تتفاقم تسرّبات المعالجة في الخلفية.
  • مخزّنة مؤقتًا: يكون التطبيق في حالة مخزّنة مؤقتًا. تتأثر هذه الحالة بشكل كبير بضغط ذاكرة النظام، مثل عمليات إزالة العمليات ذات الذاكرة المنخفضة (LMK). بما أنّ نظام التشغيل يمكنه إزالة حالة العملية هذه متى شاء، يتم توفير هذه الحالة لأغراض تصحيح الأخطاء فقط.

لفهم كيفية ارتباط حالات العملية هذه بعمليات معاودة الاتصال onTrimMemory، يمكنك الرجوع إلى الإرشادات حول تحرير الذاكرة استجابةً للأحداث.

تقسّم مؤشرات Android الحيوية أيضًا استخدام تطبيقك للذاكرة حسب نطاقات ذاكرة الوصول العشوائي (RAM). يتم عرض مقياس استخدام الذاكرة على شكل مخطط زمني لقيم النسبة المئوية اليومية، بالإضافة إلى أحدث قيمة يومية للنسبتين المئويتين 50 و90.

بعد تحديد خط الأساس للذاكرة، اتّبِع الإرشادات لـ تشخيص استخدام الذاكرة بشكل كبير وتحسينه.

تحديد تسرّبات الذاكرة باستخدام الانحراف في الطرف

للمساعدة في تحديد تسرّبات الذاكرة، ابحث عن اختلاف بين المستخدمين العاديين (P50) والمستخدمين في الطرف (P90) في مؤشرات Android الحيوية. في حين يؤدي تضخّم مواد العرض العامة إلى زيادة الذاكرة بشكل موحّد على مستوى جميع النسب المئوية، تتفاقم تسرّبات الذاكرة بمرور الوقت، ما يؤدي إلى انحراف كبير في بيانات الطرف.

عليك مقارنة مقياسَي P90 وP99 بخط الأساس P50 حسب اسم العملية. إذا تجاوزت نسبة P90 إلى P50 ‏3.5، يشير ذلك إلى تسرّب محتمل للذاكرة أثناء الجلسات الطويلة. في حالات استخدام معيّنة، لا تشير النسبة المرتفعة دائمًا إلى تسرّب، ولكن عليك تقييم سير العمل المحدّد لتحديد ما إذا كان استخدام الذاكرة المرتفع سلوكًا متوقعًا.

الموارد

تشخيص استخدام الذاكرة بشكل كبير محليًا

لبدء تشخيص مصدر استخدام الذاكرة بشكل كبير، يمكنك التقاط لقطة لأجزاء من الذاكرة باستخدام تسجيل لقطة لأجزاء من الذاكرة في إعدادات المطوّرين أو استوديو Android أو Perfetto. ننصحك بالبدء بالتقاط لقطة لأجزاء من الذاكرة محليًا بعد اختبار تجربة المستخدم الأساسية في تطبيقك.

ننصحك بشكل خاص باختبار رحلات المستخدم التالية:

  • عناصر WebView وجلسات المتصفّح داخل التطبيق
  • التمرير اللا نهائي الذي يتضمّن وسائط كثيرة
  • عمليات إنشاء مواد العرض وتعديلها

للتحقيق في تسرّبات الذاكرة المحتملة، حدِّد أولاً العمليات التي تستهلك أكبر قدر من الذاكرة باستخدام جدول اسم العملية في لوحة بيانات استخدام الذاكرة في مؤشرات Android الحيوية. بعد ذلك، شغِّل رحلات المستخدم المقابلة محليًا واجمَع صورًا للذاكرة المؤقتة على مستوى حالات العمليات المختلفة (مرئية، وخدمة تعمل في المقدّمة، ومخزّنة مؤقتًا) للتحقّق مما إذا كان التطبيق يحرّر الذاكرة بعد نقله إلى الخلفية.

إذا كنت بصدد تصحيح أخطاء الذاكرة باستخدام أداة Android Studio Profiler، يمكنك أيضًا استخدام عملية التكامل مع LeakCanary لتبسيط عملية رصد التسرّبات ورصد الصور النقطية المكرّرة لتحسين استخدام الصور.

بعد جمع لقطة لأجزاء من الذاكرة، ننصحك باستخدام مهارات الذكاء الاصطناعي في Perfetto لتحليل لقطة لأجزاء من الذاكرة وتحديد المصادر المحتملة لاستخدام الذاكرة بشكل كبير.

في ما يلي مثال على الردّ الذي يمكن أن تقدّمه مهارات الذكاء الاصطناعي:

I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
  Summary of Findings
  The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
   1. [Library] Image Cache Optimization:
       * Review the [Library] caching strategy. Ensure that bitmaps
         loaded for animations are released or downsampled when the animation is
         not in the foreground.
   2. Asset Resolution Audit:
       * The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
   3. View Lifecycle Management:
       * Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
      tab are properly detached or their animations are cleared when switching between tabs.
   4. Fix Surface Leaks:
       * Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
         native resource exhaustion.

مراجع إضافية لتفسير صور الذاكرة المؤقتة

تقدّم المراجع التالية مزيدًا من المعلومات حول تفسير صور الذاكرة المؤقتة وتصحيح أخطاء استخدام الذاكرة:

  • التحليل اليدوي: استخدِم إرشادات أداة Perfetto Heap Dump Explorer للتعرّف على كيفية التنقّل في تمثيلات لقطات لأجزاء من الذاكرة وتفسيرها في واجهة مستخدم Perfetto.
  • عمليات تخصيص Java/Kotlin: يمكنك قراءة مقالة عرض أول لقطة لأجزاء من الذاكرة في ART للحصول على جولة تفصيلية لتحليل لقطات لأجزاء من الذاكرة في بيئة "وقت تشغيل Android‏" (ART).
  • عمليات تخصيص الذاكرة الأصلية: يمكنك الرجوع إلى مستندات أداة Perfetto Native Profiling للتعرّف على كيفية جمع وتحليل ملفات تحديد مواصفات الذاكرة الأصلية (C/C++).
  • الفحص من خلال واجهة سطر الأوامر (CLI): استخدِم الأمر adb dumpsys meminfo للحصول على تفصيل سريع لاستخدام تطبيقك للذاكرة على أحد الأجهزة.
  • التحليل بمساعدة الذكاء الاصطناعي: يمكنك الاستفادة من مهارات الذكاء الاصطناعي في Perfetto لتشغيل تحليل مستند إلى نموذج لغوي كبير (LLM) للمساعدة في رصد تسرّبات الذاكرة وعمليات تخصيص الذاكرة بشكل كبير في عمليات التتبُّع.
  • التحليل المستند إلى SQL: استخدِم مهارات Perfetto SQL وTrace Analysis لتشغيل طلبات بحث منظَّمة ونصوص برمجية متخصّصة لتحليل بيانات التتبُّع المعقّدة.

تحسين استخدام الذاكرة

يمكنك الرجوع إلى هذه الأقسام للتعرّف أكثر على تحسين استخدام تطبيقك للذاكرة:

للحصول على إرشادات مفصّلة حول حلّ مشاكل الذاكرة، يمكنك الرجوع إلى دليل إدارة ذاكرة تطبيقك.