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 的名稱開頭為
scudo
,Scudo 分配器可能會使用這項屬性。這些名稱可讓您
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
選項執行指令。