当前位置:首页 > 文章列表 > 文章 > linux > Linux lsmem 怎样选择内存块输出列

Linux lsmem 怎样选择内存块输出列

来源:17golang原创 2026-10-30 19:44:00 0浏览 收藏

排查 Linux 内存热插拔或 NUMA 布局时,lsmem 默认输出看起来够用,但一旦要写脚本、对照节点或逐块定位,默认列就不够稳定。我的做法是先按任务显式写 --output,再决定是否用 --all 或 --split 改变范围的粒度。

官方地址:https://github.com/util-linux/util-linux/blob/master/sys-utils/lsmem.1.adoc

要点速览
  • 人读排查先从 RANGE,SIZE,STATE 开始,再按任务追加 NODE、ZONES 或 REMOVABLE。
  • 脚本不要依赖默认列,使用 --output 固定字段;+NODE 可在默认列上追加信息。
  • --all 查看单个内存块,--split 决定范围在哪些属性变化时分段。

先按排查目标选出最小列集合

lsmem 展示的是 sysfs 内存块的范围和 online 状态。若只是判断哪些范围在线,RANGE、SIZE、STATE 就足够;若问题涉及 NUMA 亲和性,再加 NODE;怀疑内存热移除时,加 REMOVABLE;研究内存热插拔元数据时,才需要 CONFIGURED 或 MEMMAP-ON-MEMORY。

# 只看范围、容量和 online 状态,适合快速人工判断
lsmem --output RANGE,SIZE,STATE

# 追加 NUMA 节点和 zone,观察同一范围属于哪个内存拓扑
lsmem --output RANGE,SIZE,STATE,NODE,ZONES

# 查看热插拔相关属性;不同架构可能没有完整数据
lsmem --output BLOCK,RANGE,STATE,REMOVABLE,CONFIGURED,MEMMAP-ON-MEMORY

列名必须以当前系统的 lsmem --help 为准。官方手册列出的列并不保证每台机器都支持;不支持的列可能保留表头但没有数据,某些架构还会跳过与自身无关的状态。

Linux lsmem 按排查任务选择 RANGE SIZE STATE NODE ZONES 和热插拔字段的说明图
图1:lsmem 输出列与排查目标的对应说明图,不是终端截图或运行证据。

用 --output 固定列,避免脚本被默认格式拖累

--output list 使用逗号分隔的列名替换默认集合,最适合日志采集和运维脚本。若只想在默认视图上加一列,可以使用 +list,例如 --output +NODE。这比事后用 awk 按列号切割更稳,因为默认输出的列集合可能随 util-linux 版本或系统能力变化。

目标建议列注意点
在线状态巡检RANGE,SIZE,STATE先判断范围是否在线
NUMA 拓扑RANGE,SIZE,NODE,ZONES用于对照节点和 zone
热插拔排查BLOCK,STATE,REMOVABLE,CONFIGURED字段可能受架构支持限制
脚本传输固定 --output,必要时配 --json不要把默认表格当稳定接口
# 采集机器的固定字段,避免按默认列号解析
lsmem --output BLOCK,RANGE,SIZE,STATE,NODE --bytes

# 只在默认视图上增加 NUMA 节点,适合一次性人工排查
lsmem --output +NODE

用 --all 和 --split 控制范围粒度

lsmem 默认会把输出列相同的相邻内存块合并成范围。要核对某个异常块,使用 --all 列出每个独立块;要让某个属性变化就触发分段,则使用 --split。例如按 NUMA 节点或 online 状态分段:

# 每个内存块单独列出,便于定位一个异常 BLOCK
lsmem --all --output BLOCK,RANGE,SIZE,STATE,NODE

# 只有 STATE 或 NODE 变化时才切开范围
lsmem --split=STATE,NODE --output RANGE,SIZE,STATE,NODE

# 忽略属性差异,尽量构造连续的大范围;谨慎用于解释字段
lsmem --split=none --output RANGE,SIZE,STATE,REMOVABLE

--split=none 的结果适合看整体连续区间,却不适合直接推断每一小块都可移除。官方手册特别提醒:如果聚合策略忽略了可移除性等属性,合并后的整段可能显示成一个不完全代表每个块的值。因此“范围更少”不等于“属性更准确”。

Linux lsmem 使用 all 与 split 控制内存块聚合粒度的关系说明图
图2:lsmem 的逐块查看、按属性分段与连续范围聚合关系说明图,不是实际运行截图。

把格式、边界和复查动作写进脚本

需要机器处理时,可以在固定列之外选择 --json、--pairs 或 --raw。--bytes 适合避免人类单位换算,但仍要记录列名和聚合策略。一个实用的复查顺序是:先用最小列集合确认状态,再用 --all 找到具体块,最后用 --split 验证是哪个属性导致范围被拆开。

  1. 先运行 lsmem --output RANGE,SIZE,STATE,确认在线和离线范围。
  2. 加入 NODE、ZONES 或 REMOVABLE,缩小拓扑或热插拔方向。
  3. 异常只落在一小段时改用 --all,不要继续猜聚合范围。
  4. 要生成稳定报表时固定列、格式和 --split,并记录当前 util-linux 版本。

常见问题

为什么指定了列名却没有数据?

列可能不被当前内核、架构或内存热插拔实现支持。先确认列名拼写,再接受“有表头、无值”是工具对不支持字段的表现。

什么时候应该使用 --all?

当你需要定位具体 BLOCK、核对每个块的状态,或怀疑相邻块属性并不一致时使用;日常总览保留默认聚合更易读。

--split 和 --output 有什么区别?

--output 决定显示哪些字段,--split 决定字段变化时是否切分范围。前者是列选择,后者是数据聚合策略,不能互相替代。

记住一个简单原则:先固定要看的列,再决定要不要拆开范围。这样既能让人工排查保留上下文,也能让脚本避免依赖随环境变化的默认表格。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
JavaScript DocumentFragment 插入文档后为什么变成空片段JavaScript DocumentFragment 插入文档后为什么变成空片段
上一篇
JavaScript DocumentFragment 插入文档后为什么变成空片段
抗菌针织品的宣传用语能代替执行标准标识吗
下一篇
抗菌针织品的宣传用语能代替执行标准标识吗
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    797次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    787次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    875次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    845次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    677次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码