lsmem 命令列出可用内存的范围及其在线状态。列出的内存块对应于 sysfs 中的内存块表示方式。该命令还会显示内存块大小以及处于在线和离线状态的内存量。

默认输出与 s390-tools 的原始实现兼容,但强烈建议不要在脚本中使用默认输出。在需要稳定输出的环境中,请始终使用 --output 选项配合列名列表来明确定义期望的列。

当当前内存块在前一内存块的某个输出列上存在差异时,lsmem 命令总是会列出新的内存范围。此默认行为可以通过 --split 选项覆盖(例如,lsmem --split=ZONES)。可以使用特殊词 “none” 来忽略内存块之间的所有差异,并创建尽可能大的连续范围。相反的含义是使用 --all 列出各个内存块。

请注意,如果拆分策略强制 lsmem 忽略某些属性的差异,则某些输出列可能提供不准确的信息。例如,如果将可移除和不可移除的内存块合并到一个范围,那么整个范围在 lsmem 输出中都将被标记为不可移除。

支持的列有:RANGE, SIZE, STATE, REMOVABLE, BLOCK, NODE, ZONES, CONFIGURED, MEMMAP-ON-MEMORY

  • RANGE:内存范围的起始和结束物理地址。
  • SIZE:内存范围的大小,表示该范围内的内存总量。
  • STATE:内存范围的当前在线状态。常见状态包括 onlineoffline 或过渡状态。
  • BLOCK:特定内存块的编号。
  • NODE:内存块所属的 NUMA(非统一内存访问)节点。
  • ZONES:内存块所属的内存区域,例如 DMA、Normal、Movable。
  • CONFIGURED:内存块的配置状态。有关配置或取消配置内存块的详细信息,请参阅 chmem
  • MEMMAP-ON-MEMORY:配置时内存块的 “memmap-on-memory” 状态。此设置指示内存热插拔将其内部元数据(struct pages 数组或 memmap)存储在何处。如果 MEMMAP-ON-MEMORY 设置为 1,则元数据直接从新添加的热插拔内存中分配,即使在系统内存压力很高的情况下也能执行热添加操作。如果设置为 0,则 memmap 元数据从现有的系统内存中分配。

可能的 BLOCK, CONFIGURED, STATE, MEMMAP-ON-MEMORY 状态:

BLOCKSTATECONFIGUREDMEMMAP-ON-MEMORY描述
0onlineyesyes/no内存已配置,memmap-on-memory 设置为 (1 或 0),并且内存当前处于在线状态。
1offlineyesyes/no内存已配置,但内存当前处于离线状态。
2offlinenoyes/no内存处于离线状态且已取消配置。

并非所有列在所有系统上都受支持。如果指定了不受支持的列,lsmem 会打印该列,但不提供任何数据。此外,如果 CONFIGUREDMEMMAP-ON-MEMORY 等状态与系统架构无关,lsmem 可能会跳过这些列。

使用 --help 选项查看列描述。

memmap on memory参数的输出显示了与memory_hotplug相关的、全局启用的memmap-on-memory设置。通常,该设置是通过内核命令行中的memory_hotplug.memmap_on_memory选项来指定的。

选项

-a, --all

列出每个单独的内存块,而不是合并具有相似属性的内存块。

-b, --bytes

以字节为单位打印大小,而不是以人类可读的形式。

默认情况下,大小以 1024 字节的幂次为单位显示。这些单位的正式缩写(KiB、MiB、GiB...)进一步缩短为仅首字母:K、M、G(早期是可以缩写,现在不能缩写,不符合规范与标准)...。

-J, --json
使用 JSON 输出格式。

-n, --noheadings

不打印标题行。

-o, --output 列表

指定要打印的输出列。使用 --help 获取所有支持的列的列表。要扩展默认列列表,请以 +列表 的格式指定列表。例如,lsmem -o +NODE

--output-all

输出所有可用的列。

-P, --pairs

以 key=“value” 对的形式生成输出。所有潜在不安全的字符都会进行十六进制转义(\x<code>)。

-r, --raw

以原始格式生成输出。所有潜在不安全的字符都会进行十六进制转义(\x<code>)。

-S, --split 列表

指定用于将内存块拆分为范围的列。支持的列有:STATE, REMOVABLE, NODE, ZONES, CONFIGURED, MEMMAP-ON-MEMORYnone。其他列将被静默忽略。更多详细信息请参见上面的描述部分。

-s, --sysroot 目录

收集 Linux 实例(而非运行 lsmem 命令的实例)的内存数据。指定的目录是要检查的 Linux 实例的系统根目录。

--summary[=when]

此选项控制摘要行的输出。可选参数 when 可以是 neveralwaysonly。如果省略 when 参数,则默认为 “only”。对于 --raw--pairs--json 输出,摘要输出被抑制。

-h, --help

显示帮助文本并退出。

-V, --version

显示版本信息并退出。

环境变量

LSMEM_COLUMNS=

指定要打印的输出列的逗号分隔列表。--help 中列出的所有列都可以使用。

作者

lsmem 最初由 Gerald Schaefer 用 Perl 为 s390-tools 编写。用于 util-linux 的 C 版本由 Clemens von Mann、Heiko Carstens 和 Karel Zak 编写。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐