V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Zoooooberg
V2EX  ›  Linux

Memory used 很高 但是 top 却查不到高消耗的进程

  •  
  •   Zoooooberg · 215 天前 · 1799 次点击
    这是一个创建于 215 天前的主题,其中的信息可能已经有所发展或是发生改变。
    top 看没有特别消耗 memory 的进程,但是有 80G memory used, 查了查说 kenerl IO 的 cache 占的,怎么查到底哪个进程导致的 kernel IO 缓存过大?或者说还有别的原因?

    Top:
    127105.6 total, 35212.9 free, 80489.8 used, 11402.8 buff/cache

    cat /proc/meminfo

    MemTotal: 130156092 kB
    MemFree: 36067768 kB
    MemAvailable: 39705624 kB
    Buffers: 36 kB
    Cached: 9500788 kB
    SwapCached: 0 kB
    Active: 7834960 kB
    Inactive: 2579036 kB
    Active(anon): 963280 kB
    Inactive(anon): 762620 kB
    Active(file): 6871680 kB
    Inactive(file): 1816416 kB
    Unevictable: 47104 kB
    Mlocked: 47104 kB
    SwapTotal: 0 kB
    SwapFree: 0 kB
    Dirty: 104 kB
    Writeback: 0 kB
    AnonPages: 960552 kB
    Mapped: 236052 kB
    Shmem: 963536 kB
    KReclaimable: 2174576 kB
    Slab: 7453240 kB
    SReclaimable: 2174576 kB
    SUnreclaim: 5278664 kB
    KernelStack: 48432 kB
    PageTables: 19288 kB
    NFS_Unstable: 0 kB
    Bounce: 0 kB
    WritebackTmp: 0 kB
    CommitLimit: 65078044 kB
    Committed_AS: 19507332 kB
    VmallocTotal: 34359738367 kB
    VmallocUsed: 293044 kB
    VmallocChunk: 0 kB
    Percpu: 74925056 kB
    HardwareCorrupted: 0 kB
    AnonHugePages: 0 kB
    ShmemHugePages: 0 kB
    ShmemPmdMapped: 0 kB
    FileHugePages: 0 kB
    FilePmdMapped: 0 kB
    HugePages_Total: 0
    HugePages_Free: 0
    HugePages_Rsvd: 0
    HugePages_Surp: 0
    Hugepagesize: 2048 kB
    Hugetlb: 0 kB
    DirectMap4k: 81429276 kB
    DirectMap2M: 50145280 kB
    DirectMap1G: 2097152 kB
    11 条回复    2024-05-01 19:44:50 +08:00
    xiaozhaoz
        1
    xiaozhaoz  
       215 天前
    可能有硬件驱动,直接 map 了物理内存,看 directmap 能看出来。

    以前碰到过类似的问题,因为 huge page , 网卡驱动有 bug ,ringbuf 占用了大量物理内存。
    allplay
        2
    allplay  
       215 天前 via Android
    Windows 也是,所有进程的 mem 加起来,小于 ram used
    Myprajna
        3
    Myprajna  
       215 天前
    windows 也是,任务管理器所有进程一个个加起来只用了 2G 内存,但是显示总共用了 8.8G ,已提交 18G/38.7G ,完全不准。
    xiaozhaoz
        4
    xiaozhaoz  
       215 天前   ❤️ 3
    在操作系统角度来看,物理内存除了分配给用户空间进程使用,还要给内核任务、硬件外设和 cpu 交换( dma )、文件系统 buffer/cache 、内核内存算法还有开销。

    所以只看资源管理器或 top 里面的用户进程不一定能查到内存消耗在哪里了。

    那个设备的内核内存开销也不正常, cat /proc/slabinfo 看看。
    s82kd92l
        5
    s82kd92l  
       214 天前 via Android
    Cache 一般是用得越多越好,只要不造成频繁 pagefault 卡顿就没事。
    CFM880
        6
    CFM880  
       214 天前
    使用 htop 看看,再按内存百分比排序
    Zoooooberg
        7
    Zoooooberg  
    OP
       214 天前
    @CFM880 htop 也是只能列出来 user-space 的进程使用情况吧,这边的情况是内核内存使用异常。
    Zoooooberg
        8
    Zoooooberg  
    OP
       214 天前
    @xiaozhaoz 我也在学怎么看 slabinfo, 不过让 chatGPT 分析了一下,它说看不出来啥问题。。。。
    输出太多,分 2 次回复。
    slabinfo - version: 2.1
    # name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
    nfs4_xattr_cache_cache 0 0 2128 15 8 : tunables 0 0 0 : slabdata 0 0 0
    nfs_direct_cache 0 0 224 36 2 : tunables 0 0 0 : slabdata 0 0 0
    nfs_read_data 2210 2210 960 34 8 : tunables 0 0 0 : slabdata 65 65 0
    nfs_inode_cache 16495 17400 1104 29 8 : tunables 0 0 0 : slabdata 600 600 0
    ovl_inode 86395 131741 688 47 8 : tunables 0 0 0 : slabdata 2803 2803 0
    kvm_async_pf 0 0 136 60 2 : tunables 0 0 0 : slabdata 0 0 0
    kvm_vcpu 0 0 10568 3 8 : tunables 0 0 0 : slabdata 0 0 0
    kvm_mmu_page_header 0 0 168 48 2 : tunables 0 0 0 : slabdata 0 0 0
    x86_emulator 0 0 2672 12 8 : tunables 0 0 0 : slabdata 0 0 0
    x86_fpu 0 0 4160 7 8 : tunables 0 0 0 : slabdata 0 0 0
    nf_conntrack 9436 10251 320 51 4 : tunables 0 0 0 : slabdata 201 201 0
    fuse_request 3392 3392 152 53 2 : tunables 0 0 0 : slabdata 64 64 0
    fuse_inode 6903 6903 832 39 8 : tunables 0 0 0 : slabdata 177 177 0
    rpc_inode_cache 322 322 704 46 8 : tunables 0 0 0 : slabdata 7 7 0
    xfs_dqtrx 0 0 528 62 8 : tunables 0 0 0 : slabdata 0 0 0
    xfs_dquot 0 0 496 33 4 : tunables 0 0 0 : slabdata 0 0 0
    xfs_buf 34388 35952 384 42 4 : tunables 0 0 0 : slabdata 856 856 0
    xfs_rui_item 0 0 680 48 8 : tunables 0 0 0 : slabdata 0 0 0
    xfs_rud_item 16608 17040 168 48 2 : tunables 0 0 0 : slabdata 355 355 0
    xfs_icr 28060 28198 176 46 2 : tunables 0 0 0 : slabdata 613 613 0
    xfs_ili 274998 315840 192 42 2 : tunables 0 0 0 : slabdata 7520 7520 0
    xfs_inode 461499 502976 1024 32 8 : tunables 0 0 0 : slabdata 15718 15718 0
    xfs_efi_item 7410 8170 424 38 4 : tunables 0 0 0 : slabdata 215 215 0
    xfs_efd_item 6956 7696 432 37 4 : tunables 0 0 0 : slabdata 208 208 0
    xf_trans 41020 41090 232 35 2 : tunables 0 0 0 : slabdata 1174 1174 0
    xfs_ifork 108897 149736 40 102 1 : tunables 0 0 0 : slabdata 1468 1468 0
    xfs_da_state 2176 2176 480 34 4 : tunables 0 0 0 : slabdata 64 64 0
    xfs_btree_cur 2304 2304 224 36 2 : tunables 0 0 0 : slabdata 64 64 0
    scsi_sense_cache 2016 2016 128 32 1 : tunables 0 0 0 : slabdata 63 63 0
    fsverity_info 0 0 256 32 2 : tunables 0 0 0 : slabdata 0 0 0
    fscrypt_info 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
    ip6-frags 46332 46420 184 44 2 : tunables 0 0 0 : slabdata 1055 1055 0
    PINGv6 130 130 1216 26 8 : tunables 0 0 0 : slabdata 5 5 0
    RAWv6 5018 5278 1216 26 8 : tunables 0 0 0 : slabdata 203 203 0
    UDPv6 1650 1650 1280 25 8 : tunables 0 0 0 : slabdata 66 66 0
    tw_sock_TCPv6 2244 2244 248 33 2 : tunables 0 0 0 : slabdata 68 68 0
    request_sock_TCPv6 0 0 304 53 4 : tunables 0 0 0 : slabdata 0 0 0
    TCPv6 910 910 2432 13 8 : tunables 0 0 0 : slabdata 70 70 0
    mqueue_inode_cache 2176 2176 960 34 8 : tunables 0 0 0 : slabdata 64 64 0
    userfaultfd_ctx_cache 0 0 192 42 2 : tunables 0 0 0 : slabdata 0 0 0
    dnotify_struct 0 0 32 128 1 : tunables 0 0 0 : slabdata 0 0 0
    dio 0 0 640 51 8 : tunables 0 0 0 : slabdata 0 0 0
    pid_namespace 3584 3584 144 56 2 : tunables 0 0 0 : slabdata 64 64 0
    UNIX 6843 7136 1024 32 8 : tunables 0 0 0 : slabdata 223 223 0
    ip4-frags 7880 8360 200 40 2 : tunables 0 0 0 : slabdata 209 209 0
    xfrm_state 42 42 768 42 8 : tunables 0 0 0 : slabdata 1 1 0
    PING 170 170 960 34 8 : tunables 0 0 0 : slabdata 5 5 0
    RAW 6144 6560 1024 32 8 : tunables 0 0 0 : slabdata 205 205 0
    UDP 4620 4620 1088 30 8 : tunables 0 0 0 : slabdata 154 154 0
    tw_sock_TCP 11484 12012 248 33 2 : tunables 0 0 0 : slabdata 364 364 0
    request_sock_TCP 3392 3392 304 53 4 : tunables 0 0 0 : slabdata 64 64 0
    TCP 3221 3402 2240 14 8 : tunables 0 0 0 : slabdata 243 243 0
    hugetlbfs_inode_cache 102 102 632 51 8 : tunables 0 0 0 : slabdata 2 2 0
    dquot 0 0 256 32 2 : tunables 0 0 0 : slabdata 0 0 0
    eventpoll_pwq 16296 16296 72 56 1 : tunables 0 0 0 : slabdata 291 291 0
    dax_cache 42 42 768 42 8 : tunables 0 0 0 : slabdata 1 1 0
    request_queue 67 176 2024 16 8 : tunables 0 0 0 : slabdata 11 11 0
    biovec-max 1680 1832 4096 8 8 : tunables 0 0 0 : slabdata 229 229 0
    biovec-128 6416 6608 2048 16 8 : tunables 0 0 0 : slabdata 413 413 0
    biovec-64 13024 13184 1024 32 8 : tunables 0 0 0 : slabdata 412 412 0
    khugepaged_mm_slot 0 0 112 36 1 : tunables 0 0 0 : slabdata 0 0 0
    user_namespace 3840 3840 544 60 8 : tunables 0 0 0 : slabdata 64 64 0
    dmaengine-unmap-256 15 15 2112 15 8 : tunables 0 0 0 : slabdata 1 1 0
    dmaengine-unmap-128 30 30 1088 30 8 : tunables 0 0 0 : slabdata 1 1 0
    dmaengine-unmap-16 47354 47964 192 42 2 : tunables 0 0 0 : slabdata 1142 1142 0
    sock_inode_cache 15243 16263 832 39 8 : tunables 0 0 0 : slabdata 417 417 0
    skbuff_fclone_cache 10496 10944 512 32 4 : tunables 0 0 0 : slabdata 342 342 0
    skbuff_head_cache 5792 5824 256 32 2 : tunables 0 0 0 : slabdata 182 182 0
    file_lock_cache 7326 7326 216 37 2 : tunables 0 0 0 : slabdata 198 198 0
    fsnotify_mark_connector 8448 8448 32 128 1 : tunables 0 0 0 : slabdata 66 66 0
    net_namespace 384 384 5120 6 8 : tunables 0 0 0 : slabdata 64 64 0
    task_delay_info 41488 43503 80 51 1 : tunables 0 0 0 : slabdata 853 853 0
    taskstats 2944 2944 352 46 4 : tunables 0 0 0 : slabdata 64 64 0
    proc_dir_entry 30576 30576 192 42 2 : tunables 0 0 0 : slabdata 728 728 0
    pde_opener 6528 6528 40 102 1 : tunables 0 0 0 : slabdata 64 64 0
    proc_inode_cache 25638 26928 680 48 8 : tunables 0 0 0 : slabdata 561 561 0
    seq_file 2346 2346 120 34 1 : tunables 0 0 0 : slabdata 69 69 0
    Zoooooberg
        9
    Zoooooberg  
    OP
       214 天前
    @xiaozhaoz
    bdev_cache 273 273 832 39 8 : tunables 0 0 0 : slabdata 7 7 0
    shmem_inode_cache 265507 266355 720 45 8 : tunables 0 0 0 : slabdata 5919 5919 0
    kernfs_node_cache 426642 466784 128 32 1 : tunables 0 0 0 : slabdata 14587 14587 0
    mnt_cache 16946 17850 320 51 4 : tunables 0 0 0 : slabdata 350 350 0
    filp 19178 25248 256 32 2 : tunables 0 0 0 : slabdata 789 789 0
    inode_cache 40841 43248 608 53 8 : tunables 0 0 0 : slabdata 816 816 0
    dentry 1221907 3072426 192 42 2 : tunables 0 0 0 : slabdata 73153 73153 0
    names_cache 1360 1520 4096 8 8 : tunables 0 0 0 : slabdata 190 190 0
    iint_cache 0 0 120 34 1 : tunables 0 0 0 : slabdata 0 0 0
    lsm_file_cache 133401 150790 24 170 1 : tunables 0 0 0 : slabdata 887 887 0
    buffer_head 117 117 104 39 1 : tunables 0 0 0 : slabdata 3 3 0
    uts_namespace 2368 2368 440 37 4 : tunables 0 0 0 : slabdata 64 64 0
    vm_area_struct 39686 43440 200 40 2 : tunables 0 0 0 : slabdata 1086 1086 0
    mm_struct 2400 2400 1088 30 8 : tunables 0 0 0 : slabdata 80 80 0
    files_cache 7682 7682 704 46 8 : tunables 0 0 0 : slabdata 167 167 0
    signal_cache 7199 7560 1152 28 8 : tunables 0 0 0 : slabdata 270 270 0
    sighand_cache 4119 4230 2112 15 8 : tunables 0 0 0 : slabdata 282 282 0
    task_struct 3716 4560 6080 5 8 : tunables 0 0 0 : slabdata 912 912 0
    cred_jar 54364 59178 192 42 2 : tunables 0 0 0 : slabdata 1409 1409 0
    anon_vma_chain 58680 60608 64 64 1 : tunables 0 0 0 : slabdata 947 947 0
    anon_vma 43719 44022 88 46 1 : tunables 0 0 0 : slabdata 957 957 0
    pid 41048 43424 128 32 1 : tunables 0 0 0 : slabdata 1357 1357 0
    irq_remap_cache 44 44 8192 4 8 : tunables 0 0 0 : slabdata 11 11 0
    Acpi-Operand 12768 12768 72 56 1 : tunables 0 0 0 : slabdata 228 228 0
    Acpi-Parse 43295 43873 56 73 1 : tunables 0 0 0 : slabdata 601 601 0
    Acpi-State 38964 39423 80 51 1 : tunables 0 0 0 : slabdata 773 773 0
    numa_policy 17052 18042 264 62 4 : tunables 0 0 0 : slabdata 291 291 0
    trace_event_file 41025 44804 88 46 1 : tunables 0 0 0 : slabdata 974 974 0
    ftrace_event_field 13600 13600 48 85 1 : tunables 0 0 0 : slabdata 160 160 0
    pool_workqueue 19568 21248 256 32 2 : tunables 0 0 0 : slabdata 664 664 0
    radix_tree_node 476484 916664 584 56 8 : tunables 0 0 0 : slabdata 16369 16369 0
    task_group 10808 10808 576 56 8 : tunables 0 0 0 : slabdata 193 193 0
    vmap_area 42909 57024 64 64 1 : tunables 0 0 0 : slabdata 891 891 0
    dma-kmalloc-8k 0 0 8192 4 8 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-4k 0 0 4096 8 8 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-2k 0 0 2048 16 8 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-1k 0 0 1024 32 8 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-512 0 0 512 32 4 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-256 0 0 256 32 2 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-128 0 0 128 32 1 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-64 0 0 64 64 1 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-32 0 0 32 128 1 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-16 0 0 16 256 1 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-8 0 0 8 512 1 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-192 0 0 192 42 2 : tunables 0 0 0 : slabdata 0 0 0
    dma-kmalloc-96 0 0 96 42 1 : tunables 0 0 0 : slabdata 0 0 0
    kmalloc-rcl-8k 0 0 8192 4 8 : tunables 0 0 0 : slabdata 0 0 0
    kmalloc-rcl-4k 512 512 4096 8 8 : tunables 0 0 0 : slabdata 64 64 0
    kmalloc-rcl-2k 0 0 2048 16 8 : tunables 0 0 0 : slabdata 0 0 0
    kmalloc-rcl-1k 0 0 1024 32 8 : tunables 0 0 0 : slabdata 0 0 0
    kmalloc-rcl-512 64 64 512 32 4 : tunables 0 0 0 : slabdata 2 2 0
    kmalloc-rcl-256 1984 1984 256 32 2 : tunables 0 0 0 : slabdata 62 62 0
    kmalloc-rcl-192 21378 21882 192 42 2 : tunables 0 0 0 : slabdata 521 521 0
    kmalloc-rcl-128 45568 45568 128 32 1 : tunables 0 0 0 : slabdata 1424 1424 0
    kmalloc-rcl-96 447092 1785714 96 42 1 : tunables 0 0 0 : slabdata 42517 42517 0
    kmalloc-rcl-64 63003 65984 64 64 1 : tunables 0 0 0 : slabdata 1031 1031 0
    kmalloc-rcl-32 0 0 32 128 1 : tunables 0 0 0 : slabdata 0 0 0
    kmalloc-rcl-16 0 0 16 256 1 : tunables 0 0 0 : slabdata 0 0 0
    kmalloc-rcl-8 0 0 8 512 1 : tunables 0 0 0 : slabdata 0 0 0
    kmalloc-8k 1104 1172 8192 4 8 : tunables 0 0 0 : slabdata 293 293 0
    kmalloc-4k 617950 618416 4096 8 8 : tunables 0 0 0 : slabdata 77302 77302 0
    kmalloc-2k 8078 10048 2048 16 8 : tunables 0 0 0 : slabdata 628 628 0
    kmalloc-1k 1232595 1472544 1024 32 8 : tunables 0 0 0 : slabdata 46017 46017 0
    kmalloc-512 1080884 1364928 512 32 4 : tunables 0 0 0 : slabdata 42654 42654 0
    kmalloc-256 60356 65248 256 32 2 : tunables 0 0 0 : slabdata 2039 2039 0
    kmalloc-192 1085038 1085490 192 42 2 : tunables 0 0 0 : slabdata 25845 25845 0
    kmalloc-128 27665 38112 128 32 1 : tunables 0 0 0 : slabdata 1191 1191 0
    kmalloc-96 438340 841176 96 42 1 : tunables 0 0 0 : slabdata 20028 20028 0
    kmalloc-64 896418 1005824 64 64 1 : tunables 0 0 0 : slabdata 15716 15716 0
    kmalloc-32 222256 515712 32 128 1 : tunables 0 0 0 : slabdata 4029 4029 0
    kmalloc-16 441440 736256 16 256 1 : tunables 0 0 0 : slabdata 2876 2876 0
    kmalloc-8 577437 610304 8 512 1 : tunables 0 0 0 : slabdata 1192 1192 0
    kmem_cache_node 1221 1344 64 64 1 : tunables 0 0 0 : slabdata 21 21 0
    kmem_cache 416 416 256 32 2 : tunables 0 0 0 : slabdata 13 13 0
    xiaozhaoz
        10
    xiaozhaoz  
       214 天前
    @Zoooooberg
    我前面说内核 slab 内存也不太正常,因为 slab 占用了 7G 内存,一般的系统占用 2 ,3G 算比较多的。
    看不懂 slabinfo ,也可以用 slabtop 直接看,可以看到哪些内核数据结构占用了较多内存。
    你提供的 slabinfo ,可以看出通用 kmalloc 占用内存较多,所以还是怀疑硬件驱动模块 map 了大量内存。

    我以前排查的问题是:
    1. 系统启动后,内存就用了大概 50G ,应用使用很少。
    2. lsmod 看哪些外挂驱动; dmesg 看内核 built-in 驱动。
    3. 然后根据硬件驱动 modprobe -r 卸载驱动排查,最后定位到 intel 10G 网卡驱动有问题,再 64k 和 2M page size 的时候,multi rx ,tx queue 会导致占用大量物理内存。
    4. 排查 GPU 显卡驱动时,也发现过类似问题。

    物理驱动,启动后,都会分配连续内存用于设备和 cpu 交换数据,以前的内核 page size 是 4K ,驱动一般会 pagesize * count 计算要 map 的内存大小,当 pagesize 变成 64K 甚至 2M 的时候,驱动占用的内存就会变得很大。
    samuel97857
        11
    samuel97857  
       206 天前 via Android
    我碰到过这种情况,是有个进程递归 fork 子进程。虽然单个占的 memory 不大,但是数量到了进程数上限,然后系统崩了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2855 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:11 · PVG 08:11 · LAX 16:11 · JFK 19:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.