הזיכרון הוא משאב קריטי ומוגבל במכשירים עם Android. אם אתם מפתחים או יצרני ציוד מקורי (OEM) של פלטפורמת Android, חשוב שתבינו איך הזיכרון פועל בכל רמה – החל מזמן הריצה של Java ועד לליבת Linux – כדי לבנות מערכת יציבה עם ביצועים טובים.
במדריך הזה מופיעה סקירה כללית מקיפה של ארכיטקטורת הזיכרון של Android, הכלים שזמינים לניתוח ותרגילים מעשיים שיעזרו לכם לזהות ולפתור בעיות שקשורות לזיכרון.
מטרות
אחרי שתסיימו את המדריך הזה, תוכלו:
- הסבר על המושגים הבסיסיים של זיכרון ב-Android, כולל מודל התהליך Zygote וקבצים עם מיפוי זיכרון.
- להבדיל בין Resident Set Size (RSS), Proportional Set Size (PSS) ו-Unique Set Size (USS).
- אפשר להשתמש בכלים סטנדרטיים של שורת הפקודה כמו
dumpsys meminfoו-showmapכדי להעריך במהירות את השימוש בזיכרון. - אפשר לצלם ולנתח Java heap dumps באמצעות AHAT כדי למצוא דליפות והקצאות מוגזמות.
- אפשר להשתמש ב-Perfetto וב-
heapprofdכדי ליצור פרופיל של זיכרון Java וזיכרון מקורי בכל המערכת. - הבנת אינדיקטורים של עומס על הזיכרון ברמת המערכת, כמו מידע על עומס על הזיכרון (PSI), ומעקב אחרי פעילות של Low Memory Killer (LMK).
- התבוננות בפעילות של שחזור שטח אחסון ברמת הליבה, כולל החלפה של ZRAM ופינוי של מטמון הדפים.
מבנה המדריך
המדריך הזה מחולק לקטעים הבאים, שמומלץ לקרוא אותם לפי הסדר:
- מושגים בסיסיים: העקרונות הטכניים המרכזיים של הזיכרון ב-Android.
- כלי הערכה מהירה: שימוש ב-
meminfo,showmapו-procstatsלמיון מהיר. - ניתוח הזיכרון של Java: ניתוח מעמיק של ה-heap של Java באמצעות AHAT.
- מפות סיביות (bitmap) וזיכרון: הסבר על ההשפעה של תמונות על זיכרון ה-RAM ושימוש בכלים ליצירת פרופילים שלהן.
- ניתוח זיכרון מקורי: יצירת פרופיל של זיכרון C/C++ באמצעות Perfetto ו-
heapprofd. - WebView וזיכרון: הסבר על ארכיטקטורת ריבוי התהליכים ועל הזיכרון שבשימוש ב-WebView.
- קוד האפליקציה הוא זיכרון: הסבר על ההשפעה של טעינת מחלקות ושל נפח קובץ DEX על זיכרון ה-RAM.
- Threads and memory: Analyzing the cost of native thread stacks.
- הלוקאליות של הזיכרון והביצועים: הבנה של האופן שבו דפוסי גישה לנתונים משפיעים על ביצועי המעבד.
- קשרי שירות ומצבי תהליך: הסבר על האופן שבו יחסי תלות בין תהליכים משפיעים על ציוני OOM.
- פתרון בעיות ברמת המערכת: מעקב אחרי PSI, LMK, ZRAM swap ופינוי מטמון דפים.
- שחזור זיכרון: הוצאה והחלפה: הסבר על memcg, עלות ושחזור פרואקטיבי באמצעות
memory.reclaim. - אינטראקציה בין kswapd ל-lmkd: הסבר על אופן הפעולה של kswapd ו-lmkd ביחד במצבי עומס.
דרישות מוקדמות וסביבה
במדריך הזה מוצגים תהליכי עבודה לדוגמה, נתוני השוואה לשוק ומקרים לדוגמה שממחישים איך לאבחן ולפתור בעיות בזיכרון ב-Android.
- כלי ניתוח: הטכניקות במדריך הזה מבוססות בעיקר על כלי ביצועים רגילים של Android, כולל Perfetto,
dumpsys meminfo,showmapו-AHAT. - הרשאות Root: חלק מתהליכי העבודה של אבחון ברמת המערכת (כמו בדיקת לחץ הזיכרון של ליבת המערכת או מוני PMU של חומרה) דורשים הרשאות Root מורחבות (
adb root) בגרסת build של אמולטור או מכשיר userdebug.
כאן מתחילים: מושגים בסיסיים