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

linux 内存碎片分析

1,cat /proc/pagetypeiinfo查看和关键参数分析

tt@tt-Lenovo-G485:~$ cat /proc/pagetypeinfo
Page block order: 9
Pages per block:  512

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10
Node    0, zone      DMA, type    Unmovable      0      4      2      1      0      1      2      1      1      0      0
Node    0, zone      DMA, type      Movable      6      2      1      4      1      0      0      0      0      1      0
Node    0, zone      DMA, type  Reclaimable      4      2      1      2      1      1      0      1      1      0      0
Node    0, zone      DMA, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone      DMA, type          CMA      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone      DMA, type      Isolate      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone    DMA32, type    Unmovable      1      2     64      5      1      2      0      1      0      0      0
Node    0, zone    DMA32, type      Movable      0      7      6      3      8      7      5      2      0      0      0
Node    0, zone    DMA32, type  Reclaimable    328    151      7     15      0      0      0      0      0      0      0
Node    0, zone    DMA32, type   HighAtomic      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone    DMA32, type          CMA      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone    DMA32, type      Isolate      0      0      0      0      0      0      0      0      0      0      0

Number of blocks type     Unmovable      Movable  Reclaimable   HighAtomic          CMA      Isolate
Node 0, zone      DMA            2            5            1            0            0            0
Node 0, zone    DMA32           69          725           20            0            0            0

  1. 内存分区信息(Zone)

    • 如 DMADMA32Normal 等,表示不同物理内存区域。
    • 每个分区下会列出页块类型(如 UnmovableReclaimableMovable)及其数量。
    • 每列数字表示对应阶(0~10)的连续空闲页块数量。
    • 例如:order 0 表示单页,order 9 表示 512 页的连续块。
  2. 页块类型说明

    类型描述
    Unmovable不可移动页(如内核数据结构),通常由内核固定使用25。
    Movable可移动页(如用户进程内存),可被页迁移机制回收或压缩25。
    Reclaimable可回收页(如文件缓存),可通过内存回收机制释放25。
    HighAtomic高原子性操作保留页,通常为 05。
    CMA连续内存分配器(Contiguous Memory Allocator)保留区域,未分配时为 05。
    Isolate隔离页(特殊用途),通常为 05。

    诊断提示‌:若某阶的块数持续为 0,可能表明内存碎片严重。

    该输出反映了系统内存按迁移类型和阶数的分布情况,可用于分析内存碎片和伙伴系统状态。

2,cat /proc/zoneinfo参数查看和解析

 tt@tt-Lenovo-G485:~$ cat /proc/zoneinfo
Node 0, zone      DMA
  pages free     1602
        min      12
        low      15
        high     18
        scanned  0
        spanned  4095
        present  3998
        managed  3977
    nr_free_pages 1602
    nr_alloc_batch 3
    nr_inactive_anon 621
    nr_active_anon 695
    nr_inactive_file 278
    nr_active_file 385
    nr_unevictable 0
    nr_mlock     0
    nr_anon_pages 1252
    nr_mapped    580
    nr_file_pages 733
    nr_dirty     1
    nr_writeback 0
    nr_slab_reclaimable 52
    nr_slab_unreclaimable 56
    nr_page_table_pages 59
    nr_kernel_stack 5
    nr_unstable  0
    nr_bounce    0
    nr_vmscan_write 317
    nr_vmscan_immediate_reclaim 0
    nr_writeback_temp 0
    nr_isolated_anon 0
    nr_isolated_file 0
    nr_shmem     47
    nr_dirtied   231
    nr_written   544
    nr_pages_scanned 0
    numa_hit     19148
    numa_miss    0
    numa_foreign 0
    numa_interleave 0
    numa_local   19148
    numa_other   0
    workingset_refault 233
    workingset_activate 111
    workingset_nodereclaim 0
    nr_anon_transparent_hugepages 0
    nr_free_cma  0
        protection: (0, 1580, 1580, 1580, 1580)
  pagesets
    cpu: 0
              count: 0
              high:  0
              batch: 1
  vm stats threshold: 4
    cpu: 1
              count: 0
              high:  0
              batch: 1
  vm stats threshold: 4
  all_unreclaimable: 0
  start_pfn:         1
  inactive_ratio:    1
Node 0, zone    DMA32
  pages free     11939
        min      1238
        low      1547
        high     1857
        scanned  0
        spanned  416768
        present  416192
        managed  405611
    nr_free_pages 11939
    nr_alloc_batch 64
    nr_inactive_anon 70887
    nr_active_anon 227783
    nr_inactive_file 20482
    nr_active_file 32455
    nr_unevictable 0
    nr_mlock     0
    nr_anon_pages 270765
    nr_mapped    65696
    nr_file_pages 82331
    nr_dirty     176
    nr_writeback 0
    nr_slab_reclaimable 7996
    nr_slab_unreclaimable 7933
    nr_page_table_pages 9913
    nr_kernel_stack 619
    nr_unstable  0
    nr_bounce    0
    nr_vmscan_write 100124
    nr_vmscan_immediate_reclaim 61
    nr_writeback_temp 0
    nr_isolated_anon 0
    nr_isolated_file 0
    nr_shmem     21375
    nr_dirtied   32121
    nr_written   131709
    nr_pages_scanned 0
    numa_hit     3259558
    numa_miss    0
    numa_foreign 0
    numa_interleave 27734
    numa_local   3259558
    numa_other   0
    workingset_refault 67434
    workingset_activate 33644
    workingset_nodereclaim 0
    nr_anon_transparent_hugepages 25
    nr_free_cma  0
        protection: (0, 0, 0, 0, 0)
  pagesets
    cpu: 0
              count: 157
              high:  186
              batch: 31
  vm stats threshold: 20
    cpu: 1
              count: 121
              high:  186
              batch: 31
  vm stats threshold: 20
  all_unreclaimable: 0
  start_pfn:         4096
  inactive_ratio:    3

参数说明:

字段含义
pages free当前空闲页数(1页=4KB)。
min/low/high内存水位线,用于触发内存回收机制。
spanned/presentspanned 表示总地址空间页数,present 表示实际物理内存页数。
managed由伙伴系统管理的页数(present - 保留页)
内存状态分析
DMA 区域
  • 空闲内存
    • 空闲页:1602页(约6.3MB),远高于high水位线(18页),表明当前无内存压力。
  • 活动内存
    • 匿名页(nr_anon_pages):1252页,占比较高,可能为进程堆栈或堆内存。
    • 文件页(nr_file_pages):733页,包括缓存和映射文件。
DMA32 区域
  • 空闲内存
    • 空闲页:11939页(约46.6MB),高于high水位线(1857页),内存充足。
  • 活动内存
    • 匿名页:270765页(约1GB),显著高于DMA区域,反映用户进程内存使用。
    • 文件页:82331页(约322MB),主要用于文件缓存。
关键指标解读
  • NUMA 本地化
    • numa_hit(DMA32: 3259558)远高于numa_miss,表明内存访问本地化良好。
  • 内存回收
    • nr_vmscan_write(DMA32: 100124)表示因内存回收写入磁盘的页数,反映历史回收压力。
  • 透明大页
    • nr_anon_transparent_hugepages(DMA32: 25)表示使用了大页优化。
. 潜在问题检查
  • Slab 内存
    • DMA32区域中nr_slab_unreclaimable(7933页)较高,可能存在内核对象泄漏。
  • 脏页
    • nr_dirty(DMA32: 176)需结合I/O负载判断是否影响性能。

脏页解析

系统级监控
  • vmstat‌:观察 memory 和 io 字段,so(换出)和 si(换入)反映交换活动,bi/bo 显示块I/O操作

vmstat 1

查看 cat /proc/meminfo 里面的dirty字段。 

进程级分析 

  • pidstat -d‌:监控进程的脏页生成速率1。
  • pmap‌:显示进程内存映射,识别高脏页生成的可执行文件或共享库
指标/参数含义参考值
Dirty(/proc/meminfo)当前脏页总量长期超过总内存10%需警惕
vm.dirty_background_ratio触发后台回写的脏页比例阈值(默认10%)根据I/O负载调整
vm.dirty_ratio触发同步阻塞回写的脏页比例(默认30%)避免过高导致I/O卡顿

调整参数

sysctl -w vm.dirty_background_ratio=5    # 降低后台回写阈值
sysctl -w vm.dirty_ratio=20              # 限制同步阻塞阈值
sysctl -w vm.dirty_expire_centisecs=1000 # 缩短脏页驻留时间

查看信息

sysctl vm.dirty_expire_centisecs  
sysctl vm.dirty_writeback_centisecs  

http://www.xdnf.cn/news/8601.html

相关文章:

  • Firecrawl MCP Server 深度使用指南
  • No such file or directory: ‘ffprobe‘
  • 构建智能AI记忆系统:多智能体系统记忆机制的设计与技术实现
  • Spark MLlib的运维与管理
  • 接口性能测试-工具JMeter的学习
  • UDP和TCP示例程序
  • 【MySQL】第8节|Innodb底层原理与Mysql日志机制深入剖析(一)
  • 从稳定到卓越:服务器部署后的四大核心运维策略
  • IP查询基础介绍
  • 二、ZooKeeper 集群部署搭建
  • 《深入Python:新手易踩的语法雷区与进阶启示》
  • STM32CubeMX的初使用GPIO的端口配置
  • 虚幻基础:AI
  • Baklib内容中台的主要构成是什么?
  • 大般涅槃经卷第三十五
  • windows11 安装 jupyter lab
  • ARM笔记-嵌入式系统基础
  • untiy实现汽车漫游
  • JVM(Java虚拟机)
  • MSP430通用电机控制代码(Motor)设计与实现
  • vue3 发票税率 计算
  • 人工智能杂谈(十二)大模型与小模型的应用场景及未来发展趋势
  • 电子电路:在导电过程中,铜线中的电子为什么不会消失?
  • MySQL 中表的约束 -- 空属性,默认值,主键,自增长,唯一键,外键
  • Python如何赋能自动驾驶地图构建?从点云处理到实时导航
  • 基于51单片机和8X8点阵屏、独立按键的滑动躲闪类小游戏
  • 从0到上线:微服务架构下的全栈开发实战指南
  • VILT模型阅读笔记
  • SSG vs SSR vs ISG 页面渲染策略对比
  • 为什么在设置 model.eval() 之后,pytorch模型的性能会很差?为什么 dropout 影响性能?| 深度学习