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

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  

相关文章:

  • 2025年电工杯数学建模B题【垃圾运输】原创论文分享
  • python第三方库安装错位
  • 机器学习第二十六讲:官方示例 → 跟着菜谱学做经典菜肴
  • Vue中的事件绑定【3】
  • 天地图实景三维数据分享(江苏)
  • 同为科技 智能PDU产品选型介绍 EN10/I801CI
  • 【IEEE 2025】低光增强KANT(使用KAN代替MLP)----论文详解与代码解析
  • docker虚拟化、容器化
  • 从零开始:Python语言进阶之多态
  • redis配置带验证的主从复制
  • 再谈Linux进程:进程等待、进程替换与环境变量
  • C++ 继承详解:基础篇(含代码示例)
  • NRM:快速切换 npm 镜像源的管理工具指南
  • RPG游戏设计战斗篇——战法牧协同作战体系研究
  • 如何把vue项目部署在nginx上
  • IP查询基础介绍
  • 【商业分析】充分了解“特性”和“功能”的区别,加强资源的聚焦度。
  • C语言数据结构-链式栈
  • 让MySQL更快:EXPLAIN语句详尽解析
  • Vue3集成Element Plus完整指南:从安装到主题定制下-实现后台管理系统框架搭建
  • 二手商标网/网络seo是什么
  • 机械加工网入网/网站seo报价
  • 网站建设的相关问题/线上推广渠道有哪些方式
  • 中秋网页设计素材网站/市场调研的四个步骤
  • 攸县住房和城乡规划建设局网站/贴吧友情链接在哪
  • b2b网站的主要功能/网站seo设置是什么意思