ffx profile memory
指令可測量 Fuchsia 系統的 RAM (隨機存取記憶體) 用量。
概念
ffx profile memory
指令會評估 Fuchsia 系統中 VMOs (Virtual Memory Objects) 的記憶體用量。與 Linux 的 ps
指令不同,這個指令會評估所有 VMOs 是否已對應。
以下是 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
是 VMOs 和其 子 VMOs 的總大小,這些項目專門由此程序保留。Scaled
是多個程序保留的 VMOs 和其子項 VMOs 的總大小。這些 VMOs 的費用會平均分配給保留程序。舉例來說,5 個程序共用的 500 KiB 會為每個 5 個程序增加 100 KiB。Total
是這項程序保留的所有 VMO 及其子項 VMO 的總大小,包括與其他程序共用的 VMO。
部分 VMOs 會附上名稱。您通常可以根據名稱,瞭解 VMO 的用途。舉例來說,如果 VMO 的名稱以 scudo
開頭,很可能會由 Scudo 配置器使用。這些名稱可讓 ffx profile memory
將特定程序的 VMOs 分類為可能的來源。類別清單包括:
[scudo]
:Scudo 使用的 VMOs,Fuchsia 的預設記憶體配置器。[stacks]
:VMOs 用於儲存程序執行緒的堆疊。[blobs]
:blobFS 傳出的 VMO。其中可能包含已修改的子 VMOs。[relro]
:包含重新配置的二進位檔唯讀區段的 VMOs。[data]
:包含二進位檔案資料區段的 VMOs。[unnamed]
:沒有名稱的 VMOs。
如果 VMOs 的名稱不屬於任何內建類別,系統會將其顯示為專屬類別。
實際上,ffx profile memory
指令會使用 memory_monitor
元件,擷取系統中所有 VMOs 的記憶體資訊。
評估一段時間內的記憶體用量
如要追蹤特定時間間隔的記憶體用量,請執行下列指令:
ffx profile memory --interval SECONDS
將 SECONDS 替換成時間間隔 (以秒為單位)。
下列範例指令每 3 秒會檢查目標 Fuchsia 裝置的記憶體用量,直到指令終止為止 (通常會在終端機中按下 CTRL+C
):
$ ffx profile memory --csv --interval 3
請注意,範例指令會以 CSV 格式 (--csv
) 列印輸出內容。為了進行偵錯,如要取得 memory_monitor
元件匯出的原始資料,您可以使用 --debug-json
選項執行指令。