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 @ 2023-09-24 14:37  摩斯电码  阅读(131)  评论(0编辑  收藏  举报