שימוש בזיכרון (RSS אנונימי + החלפה)

השימוש בזיכרון (RSS אנונימי + החלפה) הוא מדד שמשקף את השימוש של האפליקציה בזיכרון.

זיכרון אנונימי הוא זיכרון שלא מגובה על ידי קובץ באחסון, כמו הקצאות של ערימה וזיכרון שהוקצה באמצעות mmap. הוא מתעד את הקצאות הזיכרון הדינמיות של האפליקציה, כולל ה-heap של Java או Kotlin, הקצאות של heap מקומי לא מנוהל (שבו נשמרים נתוני פיקסלים של Bitmap ב-Android 8.0 (רמת API‏ 26) ומעלה) ומחסניות של ביצוע שרשורים. למרות שמערכת ההפעלה יכולה להפיל זיכרון מגובה קובץ במצב של עומס, היא לא יכולה להפיל זיכרון אנונימי.

Resident Set Size (גודל קבוצת התושבים, RSS) הוא המספר הכולל של דפי זיכרון (משותפים ולא משותפים) שנעשה בהם שימוש בתהליך מסוים, שנשמרים בזיכרון RAM פיזי. דף נחשב כ'משותף' אם יותר מתהליך אחד ניגש אליו (למשל, אפליקציות שניגשות לאותה ספרייה).

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

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

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

משאבים

אבחון שימוש מוגזם בזיכרון באופן מקומי

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

מומלץ במיוחד לבדוק את תהליכי המשתמש הבאים:

  • רכיבי WebView וסשנים של דפדפן באפליקציה
  • גלילה מתמשכת עם הרבה מדיה
  • תהליכי עבודה ליצירה ולעריכה של נכסים

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

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

אחרי שיוצרים את ה-heap dump, מומלץ להשתמש בכלי הפרופיל של Android כדי לנתח את ה-heap dump ולזהות מקורות אפשריים לשימוש גבוה בזיכרון.

דוגמה לתשובה של מיומנויות ה-AI:

I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
  Summary of Findings
  The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
   1. [Library] Image Cache Optimization:
       * Review the [Library] caching strategy. Ensure that bitmaps
         loaded for animations are released or downsampled when the animation is
         not in the foreground.
   2. Asset Resolution Audit:
       * The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
   3. View Lifecycle Management:
       * Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
      tab are properly detached or their animations are cleared when switching between tabs.
   4. Fix Surface Leaks:
       * Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
         native resource exhaustion.

מקורות מידע נוספים להבנת נתוני Heap Dump

במקורות המידע הבאים תוכלו לקרוא מידע נוסף על ניתוח של קובצי dump של ה-heap ועל ניפוי באגים בשימוש בזיכרון:

  • ניתוח ידני: אפשר להיעזר בהנחיות לשימוש ב-Perfetto Heap Dump Explorer כדי ללמוד איך לנווט בהדמיות של תמונת מצב של הזיכרון בממשק המשתמש של Perfetto ולפרש אותן.
  • הקצאות של Java/Kotlin: במאמר הדמיה של תמונת מצב של הזיכרון הראשונה של ART מוסבר איך לנתח תמונת מצב של הזיכרון של סביבת זמן ריצה ל-Android‏ (ART).
  • הקצאות מקוריות: כדי ללמוד איך לאסוף ולנתח פרופילים מקוריים (C/C++) של זיכרון, אפשר לעיין במסמכי התיעוד בנושא Perfetto Native Profiling.
  • בדיקה באמצעות CLI: אפשר להשתמש בפקודה adb dumpsys meminfo כדי לקבל פירוט מהיר של השימוש בזיכרון של האפליקציה במכשיר.

שיפור השימוש בזיכרון

בקטעים הבאים מפורט מידע נוסף על שיפור השימוש בזיכרון באפליקציה:

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