测量设备的内存用量

ffx profile memory 命令可以测量 Fuchsia 系统的 RAM(随机存取存储器)使用情况。

概念

ffx profile memory 命令会评估 Fuchsia 系统中的 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 的费用会平均分摊到保留进程之间。例如,5 个进程共享的 500 KiB 会分别为这 5 个进程增加 100 KiB。
  • Total 是此进程保留的所有 VMO 及其子 VMO(包括与其他进程共享的 VMO)的总大小。

某些 VMO 附加了名称。根据名称,您通常可以大致了解 VMO 的用途。例如,如果 VMO 的名称以 scudo 开头,则可能由 Scudo 分配器使用。借助这些名称,ffx profile memory 可以将给定进程的 VMO 归类为可能的来源。类别列表包括:

  • [scudo]:Scudo(Fuchsia 的默认内存分配器)使用的 VMO。
  • [stacks]:用于存储进程线程堆栈的 VMO。
  • [blobs]:由 blobFS 分发的 VMO。其中可能包括经过修改的子 VMO。
  • [relro]:包含重新定位的二进制文件只读部分的 VMO。
  • [data]:包含二进制文件数据段的 VMO。
  • [unnamed]:没有名称的 VMO。

名称不属于任何内置类别的 VMO 会显示为它们自己的类别。

在后台,ffx profile memory 命令使用 memory_monitor 组件捕获系统中所有 VMO 的内存信息。

测量一段时间内的内存用量

如需跟踪特定时间间隔内的内存用量,请运行以下命令:

ffx profile memory --interval SECONDS

SECONDS 替换为以秒为单位的时间间隔。

以下示例命令每 3 秒检查一次目标 Fuchsia 设备的内存使用情况,直到该命令终止(通常在终端中按 CTRL+C)为止:

$ ffx profile memory --csv --interval 3

请注意,示例命令会以 CSV 格式 (--csv) 输出输出内容。出于调试目的,如需获取 memory_monitor 组件导出的原始数据,您可以使用 --debug-json 选项运行该命令。