測量裝置的記憶體用量

ffx profile memory 指令可以測量 導入 Fuchsia 系統。

概念

ffx profile memory 指令會評估 VMO 已使用多少記憶體 (虛擬記憶體物件)。與 Linux 的 ps 指令不同 這項指令會評估所有對應的 VMO。

以下範例說明 ffx profile memory 擷取的處理程序記憶體用量:

Process name: core.cm
Process koid: 26387
Private:      268 KiB
PSS:          650.72 KiB (Proportional Set Size)
Total:        4.73 MiB (Private + Shared unscaled)
                              Private       Scaled        Total
    [scudo]                    60 KiB       60 KiB       60 KiB
    [data]                     56 KiB       56 KiB       56 KiB
    [relro]                    56 KiB       56 KiB       56 KiB
    bss:blob-e243d9eb          56 KiB       56 KiB       56 KiB
    [stacks]                   28 KiB       28 KiB       28 KiB
    AllocatorRingBuffer         4 KiB        4 KiB        4 KiB
    [libraries]                 4 KiB        4 KiB        4 KiB
    stack: msg of 0x1000        4 KiB        4 KiB        4 KiB
    [blobs]                       0 B   382.22 KiB     4.41 MiB     (shared)
    vdso/next                     0 B        338 B       40 KiB     (shared)
    vdso/stable                   0 B        170 B       20 KiB     (shared)

在 Fuchsia 中,記憶體可在程序之間共用,因為多個程序 相同 VMO因此,在某些情況下 記憶和共享回憶集錦為了方便區別,ffx profile memory 會回報記憶體容量 程序的使用分為 3 種,但彼此重疊:

  • Private 是 VMO 及其子項 VMO 的總大小 這些資料只會由這項程序保留
  • Scaled 是 VMO 及其子項 VMO 的總大小,這些 VMO 會保留數項 作業。這些 VMO 的成本會平均分配給保留程序。適用對象 例如,5 個程序共用 500 KiB,這 5 個程序會分別增加 100 KiB。
  • Total 是此項目保留的所有 VMO 及其子項 VMO 的總大小 ,包括與其他程序共用的 VMO。

某些 VMO 會附加名稱。以名字為例 就能點出 VMO 的用途舉例來說,如果 VMO 的名稱開頭為 scudoScudo 分配器可能會使用這項屬性。這些名稱可讓您 ffx profile memory:將指定程序的 VMO 分類為可能的來源。 類別清單包括:

  • [scudo]:Scudo 使用的 VMO,Fchsia 的預設記憶體分配器。
  • [stacks]:用來儲存程序執行緒堆疊的 VMO。
  • [blobs]:blobFS 傳出的 VMO。這些可能包括 已修改。
  • [relro]:包含已移動二進位檔中唯讀區段的 VMO。
  • [data]:包含二進位檔資料區段的 VMO。
  • [unnamed]:沒有名稱的 VMO。

如果 VMO 的名稱不屬於任何內建類別,則會顯示為 自己的類別

基本上,ffx profile memory 指令會使用 memory_monitor 元件: 擷取系統中所有 VMO 的記憶體資訊。

測量時間間隔的記憶體用量

如要追蹤特定時間間隔內的記憶體用量,請執行下列指令:

ffx profile memory --interval SECONDS

SECONDS 替換成時間間隔 (以秒為單位)。

下方的範例指令會檢查目標 Fuchsia 裝置的記憶體用量 每隔 3 秒,直到指令終止為止 (通常是按下 CTRL+C 鍵 位置):

$ ffx profile memory --csv --interval 3

請注意,範例指令會顯示 CSV 格式 (--csv) 的輸出內容。 用於偵錯,如要取得由 memory_monitor 匯出的原始資料, 元件,您可以使用 --debug-json 選項執行指令。