הזיכרון הוא משאב קריטי ומוגבל במכשירים עם Android. כמפתחי פלטפורמת Android או יצרני ציוד מקורי (OEM), חשוב שתבינו איך הזיכרון פועל בכל רמה – מסביבת זמן הריצה של Java ועד לליבת Linux – כדי לבנות מערכת יציבה עם ביצועים טובים.
במדריך הזה מופיעה סקירה כללית מקיפה על ארכיטקטורת הזיכרון של Android, הכלים שזמינים לניתוח ותרגילים מעשיים שיעזרו לכם לזהות ולפתור בעיות שקשורות לזיכרון.
מטרות
אחרי שתסיימו את המדריך הזה, תוכלו:
- הסבירו את המושגים הבסיסיים של זיכרון Android, כולל מודל התהליך של Zygote וקבצים שממופים לזיכרון.
- להבדיל בין Resident Set Size (RSS), Proportional Set Size (PSS) ו-Unique Set Size (USS).
- כדי לבדוק במהירות את השימוש בזיכרון, אפשר להשתמש בכלי שורת פקודה רגילים כמו
dumpsys meminfoו-showmap. - כדי למצוא דליפות והקצאות מוגזמות, אפשר לתעד ולנתח תמונות מצב של הזיכרון מ-Java באמצעות AHAT.
- אתם יכולים להשתמש ב-Perfetto וב-
heapprofdכדי ליצור פרופיל של זיכרון Java ושל זיכרון מקורי בכל המערכת. - להבין את האינדיקטורים של העומס על הזיכרון בכל המערכת, כמו Pressure Stall Information (PSI), ולעקוב אחרי הפעילות של Low Memory Killer (LMK).
- צפייה בפעילות של החזרת זיכרון ברמת הליבה, כולל החלפת ZRAM ופינוי מטמון דפים.
מבנה המדריך
המדריך הזה מחולק לחלקים הבאים, שמומלץ לקרוא אותם לפי הסדר:
- מושגים בסיסיים: העקרונות הטכניים העיקריים של הזיכרון ב-Android.
- כלים להערכה מהירה: שימוש ב-
meminfo, ב-showmapוב-procstatsלמיון מהיר. - ניתוח הזיכרון של Java: ניתוח מעמיק של ה-heap של Java באמצעות AHAT.
- מפות סיביות (bitmap) וזיכרון: איך תמונות משפיעות על זיכרון ה-RAM ואיך משתמשים בכלים כדי ליצור פרופיל שלהן.
- ניתוח זיכרון מקורי: יצירת פרופיל של זיכרון C/C++ באמצעות Perfetto ו-
heapprofd. - WebView וזיכרון: הסבר על הארכיטקטורה מרובת התהליכים ועל הזיכרון שבשימוש של WebView.
- קוד האפליקציה הוא זיכרון: הבנה של ההשפעה של טעינת מחלקות ושל ניפוח קובצי dex על זיכרון ה-RAM.
- שרשורים וזיכרון: ניתוח העלות של מחסניות שרשורים מקומיות.
- מיקום הזיכרון והביצועים: הבנת ההשפעה של דפוסי הגישה לנתונים על ביצועי המעבד.
- כבילות שירות ומצבי תהליכים: הבנת האופן שבו יחסי תלות בין תהליכים משפיעים על ציוני OOM.
- פתרון בעיות בכל המערכת: מעקב אחרי PSI, LMK, החלפת ZRAM ופינוי מטמון של דפים.
- החזרת זיכרון: פינוי והחלפה: הסבר על memcg, חיוב והחזרה יזומה באמצעות
memory.reclaim. - אינטראקציה בין kswapd ל-lmkd: הבנת האופן שבו kswapd ו-lmkd פועלים יחד תחת לחץ.
- החזרת דפי זיכרון למערכת ההפעלה: שימוש ב-
madviseוב-posix_fadviseכדי להחזיר דפי ערימה ודפי מטמון של קבצים שלא בשימוש לליבה. - השארת העבודה ברקע פעילה באמצעות תהליך מצומצם: העברת שירותים ו-workers שפועלים ברקע לתהליך ייעודי, כדי שזיכרון ה-GPU וממשק המשתמש לא יקבלו עדיפות גבוהה.
דרישות מוקדמות וסביבה
במדריך הזה מוצגים תהליכי עבודה לדוגמה, נתוני השוואה לשוק ומקרים לדוגמה שמראים איך לאבחן ולפתור בעיות בזיכרון ב-Android.
- כלי ניתוח: השיטות במדריך הזה משתמשות בעיקר בכלי הביצועים הרגילים של Android, כולל Perfetto,
dumpsys meminfo,showmapו-AHAT. - הרשאות ברמת הבסיס (root): חלק מתהליכי העבודה של האבחון ברמת המערכת (כמו בדיקת הלחץ על הזיכרון של הליבה או מוני PMU של החומרה) דורשים הרשאות ברמת הבסיס (
adb root) במכשיר userdebug או בגרסת build של אמולטור.
מתחילים כאן: מושגים בסיסיים