記憶體用量 (匿名 RSS + 交換空間)

「記憶體用量 (匿名 RSS + 交換空間)」是 Android Vitals 中的指標,可反映應用程式的記憶體用量。

匿名記憶體是指並非由檔案在儲存空間裡支援的記憶體,例如堆積配置和 mmap 配置的記憶體。常駐集大小 (RSS) 是指程序使用的記憶體頁面總數 (包括共用和非共用),這些頁面會保留在實體 RAM 中。對於匿名記憶體,系統可以在記憶體不足時,將頁面寫入交換空間 (或 Android 上的 zRAM)

總記憶體用量 (匿名 RSS + 交換空間) 是指應用程式未由儲存空間中的檔案支援的記憶體頁面總數,包括系統在交換空間中保留的任何記憶體。追蹤匿名 RSS + 交換空間,可確保您看到應用程式真實且無法逐出的記憶體用量。

找出記憶體用量偏高的情況

Android Vitals

Android Vitals 會根據下列程序狀態,提供應用程式的記憶體用量細目:

  • 前景:應用程式的程序可見。如果 P99 偏高,通常會影響使用者感受到的效能 (卡頓或 OOM 異常終止),而這主要是因為保留不再需要的使用者介面元件或活動所致。
  • 使用者可察覺的服務:應用程式的程序正在可察覺狀態下執行。包括前景服務、加速工作和使用者啟動的資料移轉工作。這也可能擴及系統繫結的服務,或是其他應用程式繫結的服務。由於這些服務是為長時間執行的工作而設計,因此因洩漏或無法釋放資源而保留記憶體,可能會隨著時間推移而導致第 99 百分位數尾端膨脹。
  • 背景:應用程式正在執行背景服務,或最近剛進入背景,但尚未快取。背景處理程序洩漏和未釋出的資源可能會在此處累積。因為這個程序狀態的重要性不如前景或可感知程序,請盡量避免在這個狀態下保留大量記憶體。
  • 已快取:應用程式處於快取狀態。這個狀態對系統記憶體壓力 (例如 LMK) 非常敏感。由於作業系統可以隨意逐出這個程序狀態,因此這個狀態僅供偵錯之用。

如要瞭解這些程序狀態與 onTrimMemory 回呼的關聯,請參閱「為回應事件釋放記憶體」一文中的指引。

Android Vitals 也會依據 RAM 儲存區細分應用程式的記憶體用量。記憶體用量指標會以每日百分位數值的時間軸顯示,並列出第 50 和第 90 個百分位數的最新每日值。

使用尾部偏斜找出記憶體洩漏

如要找出記憶體洩漏問題,請在 Android Vitals 中,找出一般 (第 50 個百分位數) 和尾端 (第 90 個百分位數) 使用者之間的差異。一般資源膨脹會使所有百分位數的記憶體平均增加,但記憶體洩漏會隨著時間累積,大幅扭曲尾端資料。

您應根據程序名稱,將 P90 和 P99 指標與 P50 基準進行比較。如果 P90 與 P50 的比率超過 3.5 倍,表示長時間工作階段可能發生記憶體流失。在某些情況下,比例偏高不一定表示有記憶體洩漏問題,但您應評估特定工作流程,判斷記憶體用量偏高是否為預期行為。