انواع نمایه و زمانی که هر کدام مفید است

شما می توانید چندین نوع پروفایل عملکرد را در اندروید ضبط کنید. جمع‌آوری یک نمایه به شما کمک می‌کند مشکلات مربوط به سرعت اجرای برنامه، میزان حافظه مصرفی، میزان مصرف انرژی و موارد دیگر را رفع اشکال کنید.

این سند مفیدترین انواع نمایه ها و زمان استفاده از هر کدام را برای رفع اشکالات رایج عملکرد توضیح می دهد.

ردیابی سیستم

نمونه ردیابی سیستم
شکل 1. : نمونه ردیابی سیستم.

ردیابی سیستم یک نمایه قدرتمند است که حاوی اطلاعاتی در مورد فرآیندها، رشته ها، اطلاعات زمان بندی، CPU و اجرای وظایف، و رویدادهای تعریف شده توسط سیستم یا کاربر است.

از دیدگاه اپلیکیشن، ماهیت اطلاعات موجود در ردیابی ها می تواند طیف وسیعی از حوزه ها از جمله تأخیر، جابجایی، حافظه، باتری و موارد دیگر را در بر بگیرد.

ردیابی های سیستم شامل رویدادهای کد محور زیر است که می تواند سیستم یا کاربر تعریف شود. رویدادهای کد محور رویدادهایی هستند که کاربران می توانند از طریق فراخوانی تابع راه اندازی کنند.

  • برش های ردیابی: نشان دهنده زمان بین نقاط مختلف کد شما است. آنها را می توان با Trace.beginSection و Trace.endSection API اضافه کرد.
  • شمارنده های ردیابی: مقادیر عددی که معیارها را نشان می دهند، به عنوان مثال اندازه پشته. آنها را می توان با Trace.setCounter API اضافه کرد.

ردیابی های سیستم همچنین حاوی معیارهایی هستند که می توانند از پرس و جوهای PerfettoSQL ایجاد شوند و می توان از آنها برای انجام تجزیه و تحلیل یا مقایسه ردیابی ها استفاده کرد.

توصیه می کنیم از ردیابی سیستم برای انجام کارهای زیر استفاده کنید:

  • مشکلات تاخیر را تشخیص دهید. ردیابی‌های سیستم برای یافتن مشکلات تأخیر ناشی از تأخیر، انتظار یا مشکلات زمان‌بندی عالی هستند. سایر پروفایل‌کنندگان، مانند پروفایل‌های مبتنی بر نمونه، اطلاعات زمانی را که ردیابی‌های سیستم ارائه می‌کنند، ارائه نمی‌کنند.

  • محاسبات تکراری را پیدا کنید. ردیابی می تواند نشان دهد که آیا محاسبات خاصی تکرار می شوند، که ممکن است عملیات غیر ضروری را نشان دهد.

  • مشکلات منازعه قفل را تشخیص دهید. با اطلاعاتی در مورد وضعیت‌های رشته و برش‌هایی که نشان می‌دهند زمانی که منابع مسدود می‌شوند، می‌توانید تشخیص دهید که آیا قفل‌ها (مانند بلوک‌های synchronized ) باعث تاخیر در سفر کاربر می‌شوند یا خیر.

  • چند رشته ای را در برنامه خود درک کنید. Traces نمایی از چندین رشته را ارائه می دهد که وضعیت هر رشته و هر قطعه ردیابی اضافه شده توسط سیستم یا برنامه شما را نشان می دهد. این نمای چند رشته ای به شما کمک می کند تا بفهمید کدام رشته ها فعال هستند، در حالت خواب هستند، یا در حال اجرا هستند و چگونه با هم تعامل دارند.

  • انجام تجزیه و تحلیل عملکرد پیچیده رابط کاربری قدرتمند و توانایی نمایش انواع مختلف اطلاعات، ردیابی سیستم را برای اشکال زدایی طیف گسترده ای از مشکلات عملکرد، از جمله تأخیر، حافظه و مصرف باتری مفید می کند.

ردیابی سیستم همچنین از پرس و جو با استفاده از PerfettoSQL پشتیبانی می کند. این ویژگی قدرتمند به شما امکان می دهد:

  • استخراج داده های خاص
  • داده های ردیابی را به معیارهای سفارشی تبدیل کنید.
  • مسیرهای اشکال‌زدایی را از پرس‌و‌جوها ایجاد کنید تا تجسم چیزهایی که بیشتر به آن‌ها اهمیت می‌دهید در Perfetto UI آسان‌تر شود.
  • آنالیزهای پیچیده را مستقیماً در Perfetto UI انجام دهید.

پروفایل های نمونه را پشته کنید

نمونه پشته نمونه پروفایل
شکل 2. : نمونه نمایه نمونه پشته.

نمایه های نمونه پشته با ضبط نمونه هایی از اجرای کد و ذخیره اطلاعات پشته تماس با نرخ تعیین شده در زمانی که یک رشته در حال اجرای وظایف بر روی CPU است، کار می کند. این بینشی در مورد آنچه کد شما در حین اجرا انجام می دهد را ارائه می دهد.

توصیه می کنیم از نمونه های پشته برای انجام کارهای زیر استفاده کنید:

  • هات اسپات ها را بهینه کنید نمونه‌های پشته به شناسایی بخش‌هایی از کد شما با فعالیت زیاد CPU کمک می‌کنند، به این معنی که رشته اغلب در حالت "در حال اجرا" است.
  • درک اجرای کد نمونه های پشته می توانند به شما در درک رفتار کلی پایگاه کدتان کمک کنند.
  • کدهایی که نباید اجرا شوند را شناسایی کنید. ممکن است پشته های تماسی را پیدا کنید که اصلاً قرار نبود اجرا شوند، که به فرصت های فوری برای بهینه سازی اشاره می کند.

زباله های انبوه

نمونه دامپ هیپ
شکل 3. : نمونه تخلیه پشته.

جاوا heap dumps یک عکس فوری از حافظه پشته جاوا برنامه شما را نشان می دهد. این عکس فوری شامل تمام اشیاء و نحوه ارجاع آنها به یکدیگر در زمان برداشتن زباله است.

توصیه می کنیم برای انجام کارهای زیر، زباله های انبوه را جمع آوری کنید:

  • اشیاء تکراری را کشف کنید. Heap dumps تعداد اشیاء زنده را نشان می دهد که برای ردیابی اشیاء تکراری مفید است. آنها همچنین ارجاعات شی را ارائه می دهند و به شما کمک می کنند مکان کد را که در آن اشیاء ایجاد شده اند مشخص کنید.
  • نشت حافظه را پیدا کنید حفره‌های پشته می‌توانند حافظه‌ای را نشان دهند که دیگر نباید در هنگام برداشته شدن از آن استفاده شود، که نشان‌دهنده نشت احتمالی حافظه است.
  • اشیایی که می توانند بهینه شوند را شناسایی کنید. با نشان دادن اشیایی که از حافظه زیادی استفاده می کنند و تعداد آنها، heap dumps به شناسایی الگوهای استفاده ناکارآمد از حافظه کمک می کند.

پروفایل های پشته

نمونه پروفایل Heap
شکل 4. نمونه پروفیل هیپ.

پروفایل های Heap در دو نسخه بومی و جاوا عرضه می شوند و برای اشکال زدایی مشکلات حافظه بسیار عالی هستند. آنها شبیه به نمونه های پشته فراخوانی هستند، اما به جای اندازه گیری چرخه های CPU، زمانی که حافظه تخصیص داده می شود، نمونه برداری می کنند.

ما توصیه می کنیم از پروفایل های پشته برای انجام موارد زیر استفاده کنید:

  • کاهش ریزش حافظه پروفایل های هیپ نمونه هایی را با مکان کد برای تخصیص حافظه ارائه می دهند. این به شما کمک می کند مناطقی را شناسایی کنید که اشیاء موقت زیادی ایجاد می کنند، که می توانند به جمع آوری زباله های مکرر (GC) در برنامه شما کمک کنند.
  • نشت حافظه را کشف کنید پروفایل Heap را می توان با سایر پروفایل های حافظه برای تشخیص و رفع نشت حافظه استفاده کرد. آنها به شما کمک می کنند مکان هایی را مشخص کنید که به طور قابل توجهی بیشتر از حد انتظار حافظه اختصاص می دهند.

پروفایل ها را ترکیب کنید

اغلب، شما عملکرد را با استفاده از یک نمایه واحد تجزیه و تحلیل خواهید کرد. با این حال، جمع‌آوری نمایه‌های متعدد یا یک نمایه ترکیبی واحد اغلب می‌تواند تصویر کامل‌تری ارائه دهد و به تشخیص مسائل پیچیده‌ای کمک کند که یک نمایه به تنهایی نمی‌تواند.

این سناریوها را در نظر بگیرید که در آن ترکیب پروفایل ها مفید است:

  • سناریو 1: بررسی کدهای بدون ابزار. یک ردیابی سیستم ممکن است تأخیر عملیاتی را که قبلاً ابزار کرده‌اید نشان دهد. با این حال، ممکن است به اطلاعات بیشتری در مورد بخش‌های بدون ابزار کدتان که در آن زمان‌ها اجرا می‌شوند، نیاز داشته باشید. برای بررسی، یک نمایه پشته تماس بگیرید تا کد اجرا شده را بفهمید. سپس این اطلاعات می تواند به شما در بهبود ردیابی با افزودن برش های ردیابی بیشتر کمک کند.

  • سناریو 2: تجزیه و تحلیل نشت حافظه و جمع آوری زباله. تصور کنید یک ردیابی سیستم افزایش مداوم حافظه پشته جاوا را به دلیل تخصیص‌ها نشان می‌دهد و باعث جمع‌آوری زباله‌های مکرر (GCs) می‌شود. برای درک اشیاء تخصیص داده شده، یک نمایه پشته یا یک پشته خالی بگیرید. این رویکرد ترکیبی به شما کمک می کند تا راه هایی را برای کاهش استفاده از حافظه شناسایی کنید. به عنوان مثال، کاهش تخصیص بیهوده یا بهینه با استفاده از حافظه پنهان ممکن است از وقوع GCها جلوگیری کند.