当前位置: 首页 > news >正文

如何使用vmstat 和 free 查看内存碎片化信息?

在 Linux 系统中,vmstat 和 free 命令主要用于查看系统内存的整体使用情况,但它们无法直接显示内存碎片化信息。不过,通过这两个工具的输出,结合其他指标,我们可以间接推断内存碎片化的程度。以下是具体方法:

一、使用 free 命令查看内存总体情况

free -h  # 以人类可读的格式显示内存使用情况

关键指标

  • total:总内存
  • used:已使用内存
  • free:空闲内存
  • shared:共享内存
  • buff/cache:缓存和缓冲区
  • available:实际可用内存(考虑缓存释放后)

示例输出

              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.3G        3.1G        118M        2.3G        4.9G
Swap:          2.0G          0B        2.0G

碎片化推断

如果 free 显示有大量空闲内存,但应用仍频繁出现 OOM,可能存在内存碎片化。

二、使用 vmstat 监控内存动态变化

vmstat 1 10  # 每秒采样一次,共采样10次

关键指标

  • si/so:从磁盘交换到内存 / 从内存交换到磁盘的速率(单位:KB/s)
  • bi/bo:块设备输入 / 输出速率(单位:块 /s)
  • free:空闲内存(单位:KB)

示例输出

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st0  0      0 162304  21528 627220    0    0     0     2    1    1  0  0 100  0  0

碎片化推断

若 si/so 频繁非零,即使 free 内存充足,也可能存在碎片化导致的内存分配失败。

三、查看内存碎片化的直接方法

虽然 vmstat 和 free 无法直接显示碎片化信息,但可结合以下命令:

1. 查看 /proc/buddyinfo(内存块分布)
cat /proc/buddyinfo

输出示例

Node 0, zone      DMA      0      0      0      0      0      0      0      0      1      1      3
Node 0, zone    DMA32   123    89    72    56    38    25    16    10     5     2     1
Node 0, zone   Normal  156   120   100    80    60    40    25    15     8     3     1

含义

  • 每行代表一个内存区域(如 DMA、Normal)
  • 每列代表不同大小的连续内存块数量(从 1 个页框到 1024 个页框)
  • 高阶列(右侧)数值低表示大内存块稀缺,可能存在碎片化
2. 使用 smem 分析内存分配模式
smem -t  # 按进程显示内存使用情况

示例输出

Area                           Used      Cache   Noncache
firmware/hardware                 0          0          0
kernel image                      0          0          0
kernel dynamic memory
http://www.xdnf.cn/news/302689.html

相关文章:

  • Qwen3与Deepseek R1对比(截止20250506)
  • C++ - 仿 RabbitMQ 实现消息队列(1)(环境搭建)
  • 典籍知识问答模块AI问答功能feedbackBug修改+添加对话名称修改功能
  • MySQL基础关键_009_DDL 和 DML(二)
  • vue源代码采用的设计模式分解
  • Hive优化秘籍:大数据处理加速之道
  • Excel 数据 可视化 + 自动化!Excel 对比软件
  • Excel Vlookup
  • Tomcat中Web应用程序停止时为了防止内存泄漏,JDBC驱动程序被强制取消注册出现原因
  • 荣耀A8互动娱乐组件部署实录(终章:后台配置系统与整体架构总结)
  • 链表的面试题2反转单链表
  • 第三章:langchain加载word文档构建RAG检索教程(基于FAISS库为例)
  • 5.6 react组件化开发基础
  • Elasticsearch知识汇总之ElasticSearch部署
  • conda 环境克隆
  • ϵ-prediction和z0-prediction是什么意思
  • 关于EIDE中debug的使用问题
  • 如何打造一个高并发系统?
  • linux redis 设置密码以及redis拓展
  • ROS2:话题通信CPP语法速记
  • 从零开始学习人工智能(Python高级教程)Day6-Python3 正则表达式
  • c++学习合集(2025-4-29)
  • setup 函数在 Vue 3 中的作用是什么?什么时候会执行
  • ASP.NET Core 中间件
  • git flow
  • 线性回归有截距
  • 电子电器架构 --- 网关ECU中采用多CPU解决方案来实现网关功能
  • 《算法导论(第4版)》阅读笔记:p9-p9
  • NestJS 的核心构建块有哪些?请简要描述它们的作用(例如,Modules, Controllers, Providers)
  • vue3 computed方法使用详细讲解