crash —— 获取系统内存使用统计数据

通用统计信息

crash> kmem -i
PAGES TOTAL PERCENTAGE
TOTAL MEM 197646761 754 GB ----
FREE 33983015 129.6 GB 17% of TOTAL MEM
USED 163663746 624.3 GB 82% of TOTAL MEM
SHARED 139137050 530.8 GB 70% of TOTAL MEM
BUFFERS 163044 636.9 MB 0% of TOTAL MEM
CACHED 138671703 529 GB 70% of TOTAL MEM
SLAB 1979673 7.6 GB 1% of TOTAL MEM
TOTAL HUGE 527360 2 GB ----
HUGE FREE 3072 12 MB 0% of TOTAL HUGE
TOTAL SWAP 10485759 40 GB ----
SWAP USED 229952 898.2 MB 2% of TOTAL SWAP
SWAP FREE 10255807 39.1 GB 97% of TOTAL SWAP
COMMIT LIMIT 109045459 416 GB ----
COMMITTED 190946051 728.4 GB 175% of TOTAL LIMIT

更详细的内存统计

crash> kmem -V
VM_ZONE_STAT:
NR_FREE_PAGES: 33983015
NR_ZONE_INACTIVE_ANON: 102298116
NR_ZONE_ACTIVE_ANON: 54564210
NR_ZONE_INACTIVE_FILE: 569613
NR_ZONE_ACTIVE_FILE: 1835235
NR_ZONE_UNEVICTABLE: 83405
NR_ZONE_WRITE_PENDING: 843
NR_MLOCK: 83405
NR_PAGETABLE: 615900
NR_KERNEL_STACK_KB: 104512
...
VM_NODE_STAT:
NR_INACTIVE_ANON: 102298116
NR_ACTIVE_ANON: 54564210
NR_INACTIVE_FILE: 569613
NR_ACTIVE_FILE: 1835235
NR_UNEVICTABLE: 83405
NR_SLAB_RECLAIMABLE: 1158659
NR_SLAB_UNRECLAIMABLE: 821014
NR_ISOLATED_ANON: 0
NR_ISOLATED_FILE: 0
WORKINGSET_REFAULT: 1611642
WORKINGSET_ACTIVATE: 595412
WORKINGSET_NODERECLAIM: 0
NR_ANON_MAPPED: 20486105
...
VM_NUMA_STAT:
NUMA_HIT: 3114247459241
NUMA_MISS: 324426183
NUMA_FOREIGN: 324426183
...
VM_EVENT_STATES:
PGPGIN: 1338982539116
PGPGOUT: 1957291385093
PSWPIN: 405180
PSWPOUT: 604083
PGALLOC_DMA: 0
PGALLOC_DMA32: 0
PGALLOC_NORMAL: 3507797098568
PGALLOC_MOVABLE: 0
...

显示每个zone的内存使用统计

crash> kmem -z
NODE: 0 ZONE: 0 ADDR: ffff88e03ffc1000 NAME: "DMA"
SIZE: 4095 PRESENT: 3997 MIN/LOW/HIGH: 5/8/11
VM_STAT:
NR_FREE_PAGES: 3840
NR_ZONE_INACTIVE_ANON: 0
NR_ZONE_ACTIVE_ANON: 0
NR_ZONE_INACTIVE_FILE: 0
NR_ZONE_ACTIVE_FILE: 0
...
NODE: 0 ZONE: 1 ADDR: ffff88e03ffc5000 NAME: "DMA32"
SIZE: 1044480 PRESENT: 392960 MIN/LOW/HIGH: 334/586/838
VM_STAT:
NR_FREE_PAGES: 252250
NR_ZONE_INACTIVE_ANON: 0
NR_ZONE_ACTIVE_ANON: 0
NR_ZONE_INACTIVE_FILE: 0
NR_ZONE_ACTIVE_FILE: 0
...
NODE: 0 ZONE: 2 ADDR: ffff88e03ffc9000 NAME: "Normal"
SIZE: 99876864 MIN/LOW/HIGH: 130384/228688/326992
VM_STAT:
NR_FREE_PAGES: 18034897
NR_ZONE_INACTIVE_ANON: 42387361
NR_ZONE_ACTIVE_ANON: 33542124
NR_ZONE_INACTIVE_FILE: 284979
...
NODE: 0 ZONE: 3 ADDR: ffff88e03ffcd000 NAME: "Movable"
[unpopulated]
NODE: 0 ZONE: 4 ADDR: ffff88e03ffd1000 NAME: "Device"
[unpopulated]
NODE: 1 ZONE: 0 ADDR: ffff89403fdbe000 NAME: "DMA"
[unpopulated]
NODE: 1 ZONE: 1 ADDR: ffff89403fdc2000 NAME: "DMA32"
[unpopulated]
NODE: 1 ZONE: 2 ADDR: ffff89403fdc6000 NAME: "Normal"
SIZE: 100663296 MIN/LOW/HIGH: 131420/230505/329590
VM_STAT:
NR_FREE_PAGES: 15692028
NR_ZONE_INACTIVE_ANON: 59910755
NR_ZONE_ACTIVE_ANON: 21022086
NR_ZONE_INACTIVE_FILE: 284634

标准巨型页的使用统计

crash> kmem -h
HSTATE SIZE FREE TOTAL NAME
ffffffff835bab60 1GB 0 0 hugepages-1048576kB
ffffffff835c2010 2MB 6 1030 hugepages-2048kB

查看当前伙伴系统的空闲内存信息

crash> kmem -f
NODE
0
ZONE NAME SIZE FREE MEM_MAP START_PADDR START_MAPNR
0 DMA 4095 3840 ffffea0000000040 1000 0
AREA SIZE FREE_AREA_STRUCT BLOCKS PAGES
0 4k ffff88e03ffc2000 0 0
0 4k ffff88e03ffc2010 0 0
0 4k ffff88e03ffc2020 0 0
0 4k ffff88e03ffc2030 0 0
0 4k ffff88e03ffc2040 0 0
1 8k ffff88e03ffc2058 0 0
1 8k ffff88e03ffc2068 0 0
1 8k ffff88e03ffc2078 0 0
1 8k ffff88e03ffc2088 0 0
1 8k ffff88e03ffc2098 0 0
...
ZONE NAME SIZE FREE MEM_MAP START_PADDR START_MAPNR
1 DMA32 1044480 252250 ffffea0000040000 1000000 4095
AREA SIZE FREE_AREA_STRUCT BLOCKS PAGES
0 4k ffff88e03ffc6000 0 0
0 4k ffff88e03ffc6010 6 6
0 4k ffff88e03ffc6020 0 0
0 4k ffff88e03ffc6030 0 0
0 4k ffff88e03ffc6040 0 0
1 8k ffff88e03ffc6058 0 0
1 8k ffff88e03ffc6068 6 12
1 8k ffff88e03ffc6078 0 0
1 8k ffff88e03ffc6088 0 0
1 8k ffff88e03ffc6098 0 0
2 16k ffff88e03ffc60b0 0 0
2 16k ffff88e03ffc60c0 8 32
2 16k ffff88e03ffc60d0 0 0
2 16k ffff88e03ffc60e0 0 0
...

以Node1的ZONE1中ffff88e03ffc60c0这个free_area为例,表示每个页块4*4K=16K,一共有8个空闲的页块,一共有32KB:

crash> whatis free_area
struct free_area {
struct list_head free_list[5];
unsigned long nr_free;
}
SIZE: 88
crash> *free_area ffff88e03ffc60c0
struct free_area {
free_list = {{
next = 0xffffea000011f908,
prev = 0xffffea000183be08
}, {
next = 0xffff88e03ffc60d0,
prev = 0xffff88e03ffc60d0
}, {
next = 0xffff88e03ffc60e0,
prev = 0xffff88e03ffc60e0
}, {
next = 0xffff88e03ffc60f0,
prev = 0xffff88e03ffc60f0
}, {
next = 0x8,
prev = 0xffff88e03ffc6108
}},
nr_free = 18446613095460397320
}

每个页块通过第一个page的lru挂到free_list,上面第一个free_list[0],可以通过list命令将每个页块的第一个page的地址打印出来:

crash> list -x -o page.lru -s page.flags -H ffff88e03ffc60c0
ffffea000011f900
flags = 0x8000000000000,
ffffea000015e700
flags = 0x8000000000000,
ffffea0000178100
flags = 0x8000000000000,
ffffea0001551000
flags = 0x8000000000000,
ffffea00017b5500
flags = 0x8000000000000,
ffffea0000167e00
flags = 0x8000000000000,
ffffea0001666900
flags = 0x8000000000000,
ffffea000183be00
flags = 0x8000000000000,

此外,如果需要把每个空闲页块的第一个page的地址也一并打印出来,可以直接使用下面的命令:

crash> kmem -F
...
AREA SIZE FREE_AREA_STRUCT
2 16k ffff88e03ffc60c0
ffffea000011f900
ffffea000015e700
ffffea0000178100
ffffea0001551000
ffffea00017b5500
ffffea0000167e00
ffffea0001666900
ffffea000183be00

可以看到,上面输出的page的地址跟list命令输出的是一样的

posted @   dolinux  阅读(228)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示