توضّح هذه الأمثلة كيفية استخدام تتبُّع النظام باستخدام مقياس ماكرو، إلى جانب تحليل الذاكرة، لقياس أنواع معيّنة من مشاكل الأداء وتحسينها.
تصحيح أخطاء بدء تشغيل التطبيق باستخدام systrace
عند تصحيح أخطاء وقت البدء، ننصح باستخدام سجلات systrace. Systrace هو نظام يستخدم التعليمات البرمجية المضبوطة مسبقًا لاستنتاج المدة التي تستغرقها بعض الأحداث عند حدوثها. تتيح لك عمليات التتبع هذه معرفة ما يحدث في تطبيقك، أو حتى في عمليات أخرى عبر النظام. يحتوي نظام Android الأساسي ومكتبات Jetpack على أدوات تتعلّق بالعديد من الأحداث الرئيسية في التطبيق، ويتم تسجيلها وفقًا لذلك. يمكنك أيضًا توجيه تطبيقاتك باستخدام أنشطة التتبّع المخصّصة الخاصة بك، والتي ستظهر في أدوات التمثيل البصري لبيانات النظام نفسها، لإعطاء صورة عامة عمّا حدث في التطبيق.
استخدام systrace أو Perfetto
للحصول على مزيد من المعلومات عن الاستخدام الأساسي لتتبُّع النظام، يمكنك مشاهدة الفيديو التالي: تصحيح أخطاء أداء التطبيق.
لتحليل وقت بدء التشغيل، يجب أولاً فهم ما يحدث أثناء بدء التشغيل. إذا كنت تريد الحصول على معلومات إضافية غير تلك الموضّحة في هذه الصفحة، يمكنك الاطّلاع على المستند حول وقت بدء تشغيل التطبيق للحصول على نظرة عامة حول عملية بدء تشغيل التطبيق.
مراحل بدء تشغيل التطبيق هي:
- بدء العملية
- إعداد كائنات التطبيق العامة
- إنشاء النشاط وتهيئته
- تضخيم التنسيق
- رسم الإطار الأول
تتضمن أنواع الشركات الناشئة المراحل التالية:
- التشغيل البارد: يحدث عند بدء تشغيل التطبيق للمرة الأولى منذ تشغيله، أو عند إنهاء عملية التطبيق، إما من قِبل المستخدم أو بواسطة النظام. تنشئ الشركة الناشئة عملية جديدة بدون حالة محفوظة.
- التشغيل البطيء: يحدث ذلك عند تشغيل التطبيق بالفعل في الخلفية، لكن يجب إعادة إنشاء النشاط وجلبه إلى المقدمة. تتم إعادة إنشاء النشاط أثناء إعادة استخدام العملية الحالية أو إعادة إنشاء العملية مع الحالة المحفوظة. تدعم مكتبة اختبار مقياس ماكرو الاختبار المتسق عند بدء التشغيل الدافئ باستخدام الخيار الأول.
- إعادة التشغيل السريع: تحدث هذه العملية عندما تكون العملية والنشاط لا تزال قيد التشغيل ويجب تقديمهما فقط إلى المقدّمة، مع إمكانية إعادة إنشاء بعض العناصر حسب الضرورة، فضلاً عن عرض النشاط الجديد في المقدّمة. هذا هو أقصر سيناريو للشركات الناشئة.
ننصحك بالتقاط النظام باستخدام تطبيق تتبُّع النظام على الجهاز والمتوفّر في "خيارات المطوّرين". إذا كنت تريد استخدام أدوات سطر الأوامر، تتوفّر Perfetto للاستخدام مع نظام التشغيل Android 10 (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأحدث، في حين يجب أن تستخدم الأجهزة التي تعمل بإصدارات سابقة نظام systrace.
لاحظ أن مصطلح "الإطار الأول" هو مصطلح خاطئ إلى حد ما لأن التطبيقات يمكن أن تختلف إلى حد كبير في كيفية التعامل مع بدء التشغيل بعد إنشاء النشاط الأولي. ستستمر بعض التطبيقات في تضخيم عدة إطارات، بينما ستبدأ التطبيقات الأخرى على الفور في نشاط ثانوي.
ننصحك بتضمين مكالمة
reportFullyDrawn
(المتاحة على نظام التشغيل Android 10 والإصدارات الأحدث) عند اكتمال بدء التشغيل من منظور التطبيق.
إليك بعض الأمور التي يجب البحث عنها في عمليات تتبُّع النظام هذه:
في الرسم 4، لاحِظ أنّ العمليات الأخرى التي يتم إجراؤها باستخدام وحدات الإدخال والإخراج في الوقت نفسه يمكن أن تؤدي إلى تزايد الطلب على وحدات الإدخال والإخراج، لذا تأكَّد من عدم تنفيذ العمليات الأخرى.
يمكن أن يتداخل النشاط الكبير في سلاسل المحادثات الأخرى مع مؤشر ترابط واجهة المستخدم، لذا انتبِه إلى العمل في الخلفية أثناء بدء التشغيل. يُرجى ملاحظة أنّ الأجهزة قد يكون لها إعدادات مختلفة لوحدة المعالجة المركزية (CPU)، لذلك يمكن أن يختلف عدد سلاسل التعليمات التي يمكن تشغيلها بشكل موازي على الأجهزة المختلفة.
يمكنك أيضًا الاطّلاع على دليل المصادر الشائعة للبيانات غير المرغوب فيها.
استخدام محلّل الذاكرة في "استوديو Android"
يُعدّ محلِّل الذاكرة في "استوديو Android" أداة فعّالة لتقليل ضغط الذاكرة الذي قد يكون ناتجًا عن تسرُّب الذاكرة أو أنماط الاستخدام السيئة. يوفر عرضًا مباشرًا لتخصيصات الكائنات ومجموعاتها.
لإصلاح مشاكل الذاكرة في تطبيقك، يمكنك استخدام محلّل الذاكرة لتتبُّع سبب عدد مرات حدوث تجميع غير مهم، وتحديد ما إذا كان هناك تسرّب محتمل للذاكرة يؤدي إلى زيادة كومة الذاكرة المؤقتة بشكل مستمر بمرور الوقت.
يتم تقسيم ذاكرة التطبيق إلى الخطوات التالية:
1. اكتشاف مشاكل الذاكرة
لاكتشاف مشاكل الذاكرة، ابدأ بتسجيل جلسة تحليل الذاكرة لتطبيقك. بعد ذلك، ابحث عن الكائن الذي تتزايد بصمته الذاكرة، مما يؤدي في النهاية إلى حدث تجميع البيانات غير المرغوب فيها.
الشكل 6. محلّل الذاكرة الذي يعرض أحداث جمع البيانات غير الصحيحة.{.:image-caption}
بمجرد تحديد حالة استخدام تضيف ضغط الذاكرة، ابدأ في التحليل بحثًا عن الأسباب الجذرية.
2. تشخيص النقاط الساخنة لضغط الذاكرة
حدد نطاقًا في المخطط الزمني لتصور عمليات التوزيع والحجم السطحي.
هناك عدة طرق لفرز هذه البيانات. تقدم الأقسام التالية بعض الأمثلة على كيفية مساعدة كل طريقة عرض في تحليل المشكلات.
الترتيب حسب الفئة
يعد الترتيب حسب الفئة مفيدًا عندما تريد العثور على فئات تنشئ كائنات والتي يجب تخزينها مؤقتًا أو إعادة استخدامها من تجمع ذاكرة.
على سبيل المثال، تخيل أنك ترى تطبيقًا ينشئ 2000 كائن من فئة يسمى "Vertex" كل ثانية. سيؤدي ذلك إلى زيادة عدد عمليات التخصيص بمقدار 2000 كل ثانية، كما ستراها عند الفرز حسب الفئة. هل ينبغي إعادة استخدام هذه الكائنات لتجنب إنشاء تلك البيانات غير الضرورية؟ إذا كانت الإجابة بنعم، فمن المحتمل أن تكون هناك حاجة إلى تنفيذ تجميع ذاكرة.
الترتيب حسب تكدس المكالمات
يكون الترتيب حسب تكديس الاستدعاءات مفيدًا عندما يكون هناك مسار سريع يتم فيه تخصيص الذاكرة، مثلاً داخل حلقة تكرار أو دالة محدّدة تنفِّذ الكثير من أعمال التخصيص. سيسمح لك العرض من خلال تكديس المكالمات بالاطّلاع على نقاط الاتصال المخصّصة للتخصيص.
الحجم الضحل مقابل الحجم المحتفظ به
يتتبع الحجم الضحل ذاكرة الكائن نفسه فقط، لذا فهو مفيد للغاية لتتبع الفئات البسيطة التي تتكون من العناصر الأولية في المقام الأول.
يعرض "الحجم المحتفظ به" إجمالي الذاكرة التي خصصها الكائن مباشرةً بالإضافة إلى الكائنات الأخرى المخصصة التي تمت الإشارة إليها فقط عن طريق الكائن. وهو مفيد لتتبع ضغط الذاكرة بسبب الكائنات المعقدة التي تتطلب تخصيص كائنات أخرى وليس الحقول الأولية فقط. للحصول على هذه القيمة، يمكنك إنشاء عملية تفريغ للذاكرة باستخدام محلّل الذاكرة. وتتم إضافة الكائنات المخصصة في كومة الذاكرة المؤقتة هذه إلى العرض.
3. قياس تأثير التحسين
يتمثل أحد تحسينات تحسين الذاكرة التي يسهل قياسها في جمع البيانات المهمة. عندما يقلل التحسين من ضغط الذاكرة، من المفترض أن تلاحظ انخفاضًا في مجموعات البيانات المهملة (GCs). لقياس ذلك، قم بقياس الوقت بين تجميع البيانات المهملة في المخطط الزمني للمحلِّل. من المفترض أن تظهر فترات زمنية أطول بين تجميع البيانات المهملة بعد تحسينات الذاكرة.
التأثير النهائي لتحسينات الذاكرة مثل هذه هي:
- سيتم إغلاق التطبيق بمعدل أقل بسبب مشكلات "نفاد الذاكرة" إذا كان التطبيق لا يعاني من ضغط مستمر في الذاكرة.
- ويؤدي انخفاض كمية تجميع البيانات المهملة إلى تحسين مقاييس البيانات غير الدقيقة. وذلك لأنّ وحدات تجميع البيانات المهملة (GC) تسبب تزايد تجميع البيانات في وحدة المعالجة المركزية (CPU)، ما قد يؤدي إلى تأجيل مهام العرض أثناء حدوث عملية تجميع البيانات المهملة (GC).
أفلام مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عند إيقاف JavaScript.
- الحصول على مقاييس قياس الأداء الكلي
- تحليل وتحسين عمليات بدء التطبيقات الناشئة {:#app-startup-analysis-Optimization}