ffx profile memory command can measure the RAM (Random Access Memory) usage of
a Fuchsia system.
ffx profile memory command evaluates how much memory is used by VMOs
(Virtual Memory Objects) in a Fuchsia system. Unlike Linux's
this command evaluates all VMOs whether they are mapped or not.
Below is an example of a process's memory usage captured by
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)
In Fuchsia, memory can be shared among processes because multiple processes can have
handles to the same VMO. Thus in some cases, it is useful to distinguish between private
memory and shared memory. To help distinguish,
ffx profile memory reports the memory
usage of a process in 3 distinct, but overlapping, categories:
Privateis the total size of VMOs and their child VMOs that are retained exclusively by this process.
Scaledis the total size of VMOs and their child VMOs that are retained by several processes. The cost of these VMOs is shared evenly among the retaining processes. For example, 500 KiB shared by 5 processes will add 100 KiB to each of the 5 processes.
Totalis the total size of all VMOs and their child VMOs that are retained by this process, which include VMOs that are shared with other processes.
Some VMOs have names attached to them. Based on the name, it's often possible to have
an idea of what the VMO is used for. For example, if the name of a VMO starts with
scudo, it is likely used by the Scudo allocator. The names allow
ffx profile memory to categorize the VMOs of a given process into probable sources.
The list of categories include:
[scudo]: VMOs used by Scudo, Fuchsia's default memory allocator.
[stacks]: VMOs used to store the stacks of the process's threads.
[blobs]: VMOs handed out by blobFS. These may include child VMOs that have been modified.
[relro]: VMOs containing the relocated read-only section of binaries.
[data]: VMOs containing the data segment of binaries.
[unnamed]: VMOs without names.
VMOs with names that do not belong to any of the built-in categories are displayed as their own categories.
Under the hood, the
ffx profile memory command uses the
memory_monitor component to
capture the memory information of all VMOs in the system.
Measure the memory usage over a time interval
To track the memory usage over a specific time interval, run the following command:
ffx profile memory --interval SECONDS
Replace SECONDS with a time interval in seconds.
The example command below checks the memory usage of the target Fuchsia device
every 3 seconds until the command is terminated (usually by pressing
in the terminal):
$ ffx profile memory --csv --interval 3
Notice that the example command prints the output in the CSV format (
For debugging purposes, to obtain the raw data exported by the
component, you can run the command with the