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

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

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

ردیابی‌های سیستم

مثال ردیابی سیستم
شکل ۱ .: مثال ردیابی سیستم.

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

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

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

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

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

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

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

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

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

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

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

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

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

پروفایل‌های نمونه روی هم چیده شده

نمونه پشته مثال پروفایل
شکل ۲. نمونه پروفایل نمونه پشته.

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

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

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

هیپ دامپ‌ها

مثال تخلیه هیپ
شکل ۳ .: مثالی از تخلیه هیپ.

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

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

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

پروفایل‌های هیپ

مثال پروفایل هیپ
شکل ۴ .: مثالی از پروفایل هیپ.

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

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

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

ترکیب پروفایل‌ها

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

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

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

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