درک و عیب‌یابی حافظه Android

حافظه منبعی حیاتی و محدود در دستگاه‌های مجهز به Android است. به‌عنوان توسعه‌دهنده پلاتفرم Android یا OEM، درک نحوه عملکرد حافظه در هر سطح—از زمان اجرای Java تا هسته Linux—برای ساختن یک سیستم کارآمد و پایدار ضروری است.

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

اهداف

پس‌از تکمیل این راهنما، می‌توانید:

  • توضیح مفاهیم اساسی حافظه Android، ازجمله مدل فرایند Zygote و فایل‌های نگاشت‌شده در حافظه.
  • تفاوت بین Resident Set Size (RSS)، Proportional Set Size (PSS)، و Unique Set Size (USS) را تشخیص دهید.
  • از ابزارهای خط فرمان استاندارد مانند dumpsys meminfo و showmap برای ارزیابی سریع استفاده از حافظه استفاده کنید.
  • رونوشت‌های پشته جاوا را بااستفاده از AHAT ضبط و تحلیل کنید تا نشت‌ها و تخصیص‌های بیش‌ازحد را پیدا کنید.
  • از Perfetto و heapprofd برای نمایه‌سازی Java و حافظه بومی در سراسر سیستم استفاده کنید.
  • نشانگرهای فشار حافظه در سراسر سیستم مانند Pressure Stall Information (PSI) را درک کنید و فعالیت Low Memory Killer (LMK) را پایش کنید.
  • فعالیت بازیابی سطح هسته را مشاهده کنید، ازجمله تعویض ZRAM و حذف حافظه پنهان صفحه.

ساختار راهنما

این راهنما به بخش‌های زیر تقسیم شده است و به‌گونه‌ای طراحی شده است که به‌ترتیب خوانده شود:

  1. مفاهیم بنیادی: اصول فنی اصلی حافظه Android.
  2. ابزارهای ارزیابی سریع: استفاده از meminfo، showmap، و procstats برای تریاژ سریع.
  3. تحلیل حافظه جاوا: بررسی عمیق پشته جاوا با AHAT.
  4. بیت‌مپ‌ها و حافظه: درک نحوه تأثیر تصاویر بر RAM و استفاده از ابزارها برای نمایه‌سازی آن‌ها.
  5. تجزیه‌وتحلیل حافظه بومی: نمایه‌سازی حافظه C/C++‎ با Perfetto و heapprofd.
  6. «وب‌نما» و حافظه: آشنایی با معماری چندفرایندی و ردپای حافظه «وب‌نما».
  7. کد برنامه حافظه است: درک اینکه چگونه بارگیری کلاس و تورم dex بر RAM تأثیر می‌گذارد.
  8. رشته‌ها و حافظه: تجزیه‌وتحلیل هزینه پشته‌های رشته بومی.
  9. محل حافظه و عملکرد: درک اینکه الگوهای دسترسی به داده‌ها چگونه بر عملکرد CPU تأثیر می‌گذارند.
  10. اتصال‌های سرویس و وضعیت‌های فرایند: آشنایی با نحوه تأثیر وابستگی‌های بین فرایندی بر امتیازهای «کمبود حافظه».
  11. عیب‌یابی در سطح سیستم: نظارت بر PSI، LMK، مبادله ZRAM، و تخلیه حافظه پنهان صفحه.
  12. بازپس‌گیری حافظه: تخلیه و تعویض: آشنایی با memcg، شارژ، و بازپس‌گیری پیش‌کنشی با memory.reclaim.
  13. تعامل kswapd و lmkd: آشنایی با نحوه عملکرد kswapd و lmkd با یکدیگر تحت فشار.
  14. برگرداندن صفحه‌های حافظه به سیستم‌عامل: استفاده از madvise و posix_fadvise برای برگرداندن صفحه‌های توده استفاده‌نشده و صفحه‌های حافظه نهان فایل به هسته.
  15. فعال نگه داشتن کار پس‌زمینه‌ای با فرایند سبک: انتقال سرویس‌ها و کارگران پس‌زمینه‌ای به فرایند اختصاصی تا حافظه واسط کاربر و گرافیک در اولویت بالا نگه داشته نشود.

پیش‌نیازها و محیط

این راهنما گردش کارهای مرجع، داده‌های محک، و مطالعات موردی را ارائه می‌دهد و نحوه تشخیص و حل مشکلات حافظه Android را نشان می‌دهد.

  • ابزارهای تجزیه‌وتحلیل: تکنیک‌های این راهنما عمدتاً از ابزارهای استاندارد عملکرد Android استفاده می‌کنند، ازجمله Perfetto، dumpsys meminfo، showmap، و AHAT.
  • امتیازات Root: برخی‌از گردش‌های کاری عیب‌یابی سطح سیستم (مانند بازرسی فشار حافظه هسته یا شمارنده‌های PMU سخت‌افزار) به امتیازات Root ارتقایافته (adb root) در دستگاه userdebug یا ساخت شبیه‌ساز نیاز دارند.

از اینجا شروع کنید: مفاهیم بنیادی