גורמים לזיכרון נמוך

פלטפורמת Android פועלת על בסיס ההנחה שזיכרון פנוי הוא זיכרון מבוזבז. מערכת Android מנסה להשתמש בכל הזיכרון הזמין בכל זמן. לדוגמה, המערכת שומרת אפליקציות בזיכרון אחרי שהן נסגרו, כדי שהמשתמשים יוכלו לחזור אליהן במהירות. לכן, מכשירי Android פועלים לעיתים קרובות עם מעט מאוד זיכרון פנוי (כאן מוסבר על הקצאת זיכרון ב-Android).

התהליך low memory killer (LMK) daemon ב-Android עוקב אחרי מצב הזיכרון במערכת Android שפועלת, ומגיב ללחץ גבוה על הזיכרון על ידי סגירת התהליכים הכי פחות חיוניים כדי לשמור על רמת ביצועים מקובלת במערכת.

כדי להחליט איזה תהליך להרוג, הדימון LMK משתמש בציון out of memory שנקרא oom_adj_score כדי לתת עדיפות לתהליכים שפועלים. תהליכים עם ציון גבוה מומתים קודם. אפליקציות ברקע מושבתות קודם, ותהליכי המערכת מושבתים אחרונים. בטבלה הבאה מפורטות קטגוריות הניקוד של LMK, מהגבוהה לנמוכה. הפריטים בקטגוריה עם הציון הגבוה ביותר, בשורה הראשונה, יימחקו קודם:

תהליכים ב-Android מדורגים מהציון הגבוה ביותר לנמוך ביותר: אפליקציות ברקע, האפליקציה הקודמת, אפליקציית הבית, שירותים, אפליקציות גלויות, אפליקציה בחזית, תהליכים מתמידים, תהליכי מערכת ותהליכים מקומיים.
איור 1. תהליכים ב-Android, כאשר ציונים גבוהים מופיעים בחלק העליון וציונים נמוכים מופיעים בחלק התחתון.

מדד LMK ב'תפקוד האפליקציה' ב-Android

בעזרת המידע על תפקוד האפליקציה תוכלו לעקוב אחרי שיעור הבקשות לעדכון מיקום (LMK) של האפליקציה ולשפר אותו. במדדי ה-vitals של Android נמדד רק שיעור LMK אחד: שיעור אירועי ה-LMK שהשפיעו על המשתמשים.

המדד משקף את אחוז המשתמשים הפעילים ביום (DAU) שאירוע LMK אחד לפחות השפיע עליהם. ‫LMK שהשפיע על המשתמשים הוא LMK שסביר להניח שהמשתמשים הבחינו בו. לדוגמה, אירועי LMK שמתרחשים בזמן שהאפליקציה מציגה פעילות או פועלת כשירות בחזית.

המדד מופיע בקטע יציבות במדד תפקוד האפליקציה ל-Android:

איור 2. שיעור אירועי ה-LMK שהשפיעו על המשתמשים במדדי תפקוד האפליקציה ל-Android.

בדומה למדדים חיוניים אחרים, כמו אירועי ANR וקריסת אפליקציות, אפשר לסנן את המדדים, להשוות את המדדים שלכם לבין המדדים של קבוצת האפליקציות הדומות או לעקוב אחרי השינוי במדד לאורך תקופה ארוכה (עד 3 שנים). הנתונים יהיו זמינים לאפליקציות קיימות החל מ-28 בינואר 2025.

איור 3. סקירה כללית של שיעור ה-LMK ב'תפקוד האפליקציה'.

כלים לניתוח ביצועי הזיכרון

הכלים הבאים יכולים לעזור לכם למצוא ולזהות בעיות זיכרון בדרכים הבאות:

  • איך האפליקציה מקצה זיכרון לאורך זמן. אפשר לראות תרשים בזמן אמת של נפח הזיכרון שבו האפליקציה משתמשת, מספר אובייקטי Java שהוקצו ומועד האיסוף של האשפה.
  • הפעלת אירועי איסוף אשפה וצילום קובץ snapshot של אשכול Java בזמן הריצה של האפליקציה.
  • מתעדים את הקצאות הזיכרון של האפליקציה, בודקים את כל האובייקטים שהוקצו ומציגים את מעקב הסטאק לכל הקצאה.

Memory Profiler ב-Android Studio

Android Studio כולל את Memory Profiler כרכיב של Android Profiler, שעוזר לזהות דליפות זיכרון ותנודות בשימוש בזיכרון שעלולות לגרום לגמגום, לקיפאון ואפילו לקריסות של אפליקציות. בניתוח הפרופיל מוצג תרשים בזמן אמת של השימוש בזיכרון של האפליקציה, ומאפשר לכם לצלם גרסת dump של אשכול, לאלץ איסוף אשפה ולעקוב אחר הקצאת הזיכרון.

איור 4. הצגת הפניות JNI גלובליות ב-Android Studio Memory Profiler.

כלים ליצירת פרופילים של זיכרון ב-Unity

אם אתם משתמשים ב-Unity Engine כדי לפתח את האפליקציות שלכם, תוכלו לפעול לפי ההנחיות ליצירת פרופיל של זיכרון ב-Unity. ב-Unity יש שני כלים לניתוח השימוש בזיכרון באפליקציה.

הכלי הראשון הוא מודול Memory Profiler, שהוא כלי לניתוחי פרופיל מובנה שמספק מידע בסיסי על המקומות שבהם האפליקציה משתמשת בזיכרון.

מודול הזיכרון מציג הקצאות זיכרון כמו זיכרון טקסטורות וזיכרון רשתות.
איור 5. חלון Unity Profiler עם המודול Memory (זיכרון) שנבחר.

הכלי השני הוא חבילת Memory Profiler, חבילת Unity שאפשר להוסיף לפרויקט. החבילה מוסיפה חלון נוסף של Memory Profiler ל-Unity Editor. כלי ניתוח הזיכרון מאפשר לנתח את השימוש בזיכרון באפליקציה בפירוט רב יותר. אפשר לאחסן ולשמור קובצי snapshot ולהשוות ביניהם כדי למצוא דליפות זיכרון, או להציג את הפריסה של הזיכרון כדי למצוא בעיות של פירוט זיכרון.

איור 6. ניתוח קובץ snapshot של זיכרון באמצעות החלון Memory Profiler.

תובנות על זיכרון ב-Unreal

באפליקציות שנוצרו באמצעות Unreal Engine אפשר להשתמש ב-Unreal Memory Insights כדי לראות מידע מפורט על הקצאת זיכרון ועל ביטול הקצאת זיכרון, כולל תגי LLM (זיכרון ברמה נמוכה) וערימות קריאות שמשויכות לקטעי זיכרון.

מערכת השאילתות של Memory Insights יכולה למצוא הקצאות פעילות בכל שלב, לזהות שינויים בשימוש בזיכרון, לאתר דליפות זיכרון ולהבדיל בין הקצאות לטווח קצר לבין הקצאות לטווח ארוך.

החל מ-UE 5.4, כלי Memory Insights תומך במעקב אחר זיכרון באמצעות סטאקים של קריאות בפרויקטים ל-Android.

מכשיר מעקב של תובנות לגבי זיכרון שמציג תרשים של הזיכרון הראשי, מספר ההקצאות הפעילות ומספר האירועים של הקצאה/שחרור.
איור 6. מכשיר המעקב של Unreal אחרי Memory Insights.

מקורות מידע נוספים