• 内核内存泄露


    问题如下:使用仪器测试盒子设备 ipv6 完毕后,发现内存降不下去

    1、简单分析 slabinfo 以及buffinfo

     Develop>cat /proc/slabinfo 
    slabinfo - version: 2.1
    # name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
    ext4_groupinfo_4k  30296  30296    144   28    1 : tunables    0    0    0 : slabdata   1082   1082      0
    bio-1               1325   1325   1280   25    8 : tunables    0    0    0 : slabdata     53     53      0
    ext4_groupinfo_1k    120    120    136   30    1 : tunables    0    0    0 : slabdata      4      4      0
    RAWv6                 26     26   1216   26    8 : tunables    0    0    0 : slabdata      1      1      0
    UDPLITEv6              0      0   1216   26    8 : tunables    0    0    0 : slabdata      0      0      0
    UDPv6                416    416   1216   26    8 : tunables    0    0    0 : slabdata     16     16      0
    tw_sock_TCPv6          0      0    280   29    2 : tunables    0    0    0 : slabdata      0      0      0
    request_sock_TCPv6 7105488 7105488    416   39    4 : tunables    0    0    0 : slabdata 182192 182192      0
    TCPv6             7105434 7107315   2176   15    8 : tunables    0    0    0 : slabdata 473821 473821      0
    nf_conntrack_1         0      0    320   25    2 : tunables    0    0    0 : slabdata      0      0      0
    dm_bio_prison_cell      0      0     96   42    1 : tunables    0    0    0 : slabdata      0      0      0
    kcopyd_job             0      0   3312    9    8 : tunables    0    0    0 : slabdata      0      0      0
    dm_uevent              0      0   2632   12    8 : tunables    0    0    0 : slabdata      0      0      0
    cfq_queue            560    560    232   35    2 : tunables    0    0    0 : slabdata     16     16      0
    bsg_cmd                0      0    312   26    2 : tunables    0    0    0 : slabdata      0      0      0
    mqueue_inode_cache     36     36    896   36    8 : tunables    0    0    0 : slabdata      1      1      0
    au_finfo            4223   4448    256   32    2 : tunables    0    0    0 : slabdata    139    139      0
    au_icntnr           3060   3060    896   36    8 : tunables    0    0    0 : slabdata     85     85      0
    au_dinfo           20544  20544    256   32    2 : tunables    0    0    0 : slabdata    642    642      0
    fuse_request           0      0    400   40    4 : tunables    0    0    0 : slabdata      0      0      0
    fuse_inode             0      0    768   42    8 : tunables    0    0    0 : slabdata      0      0      0
    ecryptfs_key_record_cache      0      0    576   28    4 : tunables    0    0    0 : slabdata      0      0      0
    ecryptfs_inode_cache      0      0   1024   32    8 : tunables    0    0    0 : slabdata      0      0      0
    ecryptfs_file_cache      0      0     16  256    1 : tunables    0    0    0 : slabdata      0      0      0
    isofs_inode_cache      0      0    616   26    4 : tunables    0    0    0 : slabdata      0      0      0
    exfat_inode_cache      0      0    752   43    8 : tunables    0    0    0 : slabdata      0      0      0
    fat_inode_cache        0      0    704   46    8 : tunables    0    0    0 : slabdata      0      0      0
    fat_cache              0      0     40  102    1 : tunables    0    0    0 : slabdata      0      0      0
    hugetlbfs_inode_cache     84     84    584   28    4 : tunables    0    0    0 : slabdata      3      3      0
    jbd2_journal_handle   1360   1360     48   85    1 : tunables    0    0    0 : slabdata     16     16      0
    jbd2_journal_head    544    544    120   34    1 : tunables    0    0    0 : slabdata     16     16      0
    jbd2_revoke_table_s   1536   1536     16  256    1 : tunables    0    0    0 : slabdata      6      6      0
    jbd2_revoke_record_s    640    640     32  128    1 : tunables    0    0    0 : slabdata      5      5      0
    ext2_inode_cache      82     82    792   41    8 : tunables    0    0    0 : slabdata      2      2      0
    ext4_inode_cache   41550  41550   1072   30    8 : tunables    0    0    0 : slabdata   1385   1385      0
    ext4_free_data      1024   1024     64   64    1 : tunables    0    0    0 : slabdata     16     16      0
    ext4_allocation_context   4640   4640    128   32    1 : tunables    0    0    0 : slabdata    145    145      0
    ext4_io_end          952    952     72   56    1 : tunables    0    0    0 : slabdata     17     17      0
    ext4_extent_status   4080   4080     40  102    1 : tunables    0    0    0 : slabdata     40     40      0
    reiser_inode_cache   2653   2924    752   43    8 : tunables    0    0    0 : slabdata     68     68      0
    dquot                512    512    256   32    2 : tunables    0    0    0 : slabdata     16     16      0
    kioctx                 0      0    896   36    8 : tunables    0    0    0 : slabdata      0      0      0
    userfaultfd_ctx_cache      0      0    128   32    1 : tunables    0    0    0 : slabdata      0      0      0
    fsnotify_mark          0      0     80   51    1 : tunables    0    0    0 : slabdata      0      0      0
    dnotify_struct       128    128     32  128    1 : tunables    0    0    0 : slabdata      1      1      0
    pid_namespace          0      0   2224   14    8 : tunables    0    0    0 : slabdata      0      0      0
    posix_timers_cache    102    102    240   34    2 : tunables    0    0    0 : slabdata      3      3      0
    UNIX                 448    448   1152   28    8 : tunables    0    0    0 : slabdata     16     16      0
    ip4-frags              0      0    216   37    2 : tunables    0    0    0 : slabdata      0      0      0
    UDP-Lite               0      0   1024   32    8 : tunables    0    0    0 : slabdata      0      0      0
    flow_cache             0      0    112   36    1 : tunables    0    0    0 : slabdata      0      0      0
    UDP                  512    512   1024   32    8 : tunables    0    0    0 : slabdata     16     16      0
    tw_sock_TCP            0      0    280   29    2 : tunables    0    0    0 : slabdata      0      0      0
    request_sock_TCP     624    624    416   39    4 : tunables    0    0    0 : slabdata     16     16      0
    TCP                  672    672   2048   16    8 : tunables    0    0    0 : slabdata     42     42      0
    eventpoll_pwq       5824   5824     72   56    1 : tunables    0    0    0 : slabdata    104    104      0
    blkdev_queue         216    216   1336   24    8 : tunables    0    0    0 : slabdata      9      9      0
    blkdev_requests      924    924    368   44    4 : tunables    0    0    0 : slabdata     21     21      0
    blkdev_ioc           624    624    104   39    1 : tunables    0    0    0 : slabdata     16     16      0
    khugepaged_mm_slot   3570   3570     40  102    1 : tunables    0    0    0 : slabdata     35     35      0
    sock_inode_cache    3583   3750    640   25    4 : tunables    0    0    0 : slabdata    150    150      0
    skbuff_fclone_cache   3250   3275    640   25    4 : tunables    0    0    0 : slabdata    131    131      0
    skbuff_head_cache   1385   1700    320   25    2 : tunables    0    0    0 : slabdata     68     68      0
    file_lock_cache      624    624    208   39    2 : tunables    0    0    0 : slabdata     16     16      0
    net_namespace          0      0   7424    4    8 : tunables    0    0    0 : slabdata      0      0      0
    shmem_inode_cache   3816   3816    656   24    4 : tunables    0    0    0 : slabdata    159    159      0
    taskstats            384    384    328   24    2 : tunables    0    0    0 : slabdata     16     16      0
    proc_inode_cache    8362   8788    624   26    4 : tunables    0    0    0 : slabdata    338    338      0
    sigqueue             425    425    160   25    1 : tunables    0    0    0 : slabdata     17     17      0
    bdev_cache           585    585    832   39    8 : tunables    0    0    0 : slabdata     15     15      0
    kernfs_node_cache  26619  26860    120   34    1 : tunables    0    0    0 : slabdata    790    790      0
    mnt_cache           1554   1554    384   42    4 : tunables    0    0    0 : slabdata     37     37      0
    inode_cache         7771   8008    568   28    4 : tunables    0    0    0 : slabdata    286    286      0
    dentry            130056 135786    192   42    2 : tunables    0    0    0 : slabdata   3233   3233      0
    iint_cache             0      0     72   56    1 : tunables    0    0    0 : slabdata      0      0      0
    buffer_head        21624  24297    104   39    1 : tunables    0    0    0 : slabdata    623    623      0
    nsproxy             4526   4526     56   73    1 : tunables    0    0    0 : slabdata     62     62      0
    vm_area_struct     20199  21320    200   40    2 : tunables    0    0    0 : slabdata    533    533      0
    mm_struct            624    624    832   39    8 : tunables    0    0    0 : slabdata     16     16      0
    files_cache          672    672    768   42    8 : tunables    0    0    0 : slabdata     16     16      0
    signal_cache        1170   1170   1088   30    8 : tunables    0    0    0 : slabdata     39     39      0
    sighand_cache        720    720   2112   15    8 : tunables    0    0    0 : slabdata     48     48      0
    task_struct         1135   1161   3328    9    8 : tunables    0    0    0 : slabdata    129    129      0
    cred_jar            3234   3234    192   42    2 : tunables    0    0    0 : slabdata     77     77      0
    anon_vma_chain     20532  24320     64   64    1 : tunables    0    0    0 : slabdata    380    380      0
    anon_vma           12999  14178     80   51    1 : tunables    0    0    0 : slabdata    278    278      0
    numa_policy          170    170     24  170    1 : tunables    0    0    0 : slabdata      1      1      0
    radix_tree_node     4872   4872    584   28    4 : tunables    0    0    0 : slabdata    174    174      0
    trace_event_file    1702   1702     88   46    1 : tunables    0    0    0 : slabdata     37     37      0
    ftrace_event_field   3910   3910     48   85    1 : tunables    0    0    0 : slabdata     46     46      0
    idr_layer_cache      705    705   2096   15    8 : tunables    0    0    0 : slabdata     47     47      0
    dma-kmalloc-8192       0      0   8192    4    8 : tunables    0    0    0 : slabdata      0      0      0
    dma-kmalloc-4096       0      0   4096    8    8 : tunables    0    0    0 : slabdata      0      0      0
    dma-kmalloc-2048       0      0   2048   16    8 : tunables    0    0    0 : slabdata      0      0      0
    dma-kmalloc-1024       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
    kmalloc-8192         156    156   8192    4    8 : tunables    0    0    0 : slabdata     39     39      0
    kmalloc-4096         543    568   4096    8    8 : tunables    0    0    0 : slabdata     71     71      0
    kmalloc-2048        1168   1200   2048   16    8 : tunables    0    0    0 : slabdata     75     75      0
    kmalloc-1024        3744   3840   1024   32    8 : tunables    0    0    0 : slabdata    120    120      0
    kmalloc-512         2656   2656    512   32    4 : tunables    0    0    0 : slabdata     83     83      0
    kmalloc-256        13554  23488    256   32    2 : tunables    0    0    0 : slabdata    734    734      0
    kmalloc-128       7216432 7265664    128   32    1 : tunables    0    0    0 : slabdata 227052 227052      0
    kmem_cache_node      256    256    128   32    1 : tunables    0    0    0 : slabdata      8      8      0
    kmem_cache           256    256    256   32    2 : tunables    0    0    0 : slabdata      8      8      0
     Develop>cat /proc/buddyinfo 
    Node 0, zone      DMA    812    745    599    616    399    261    202    185    123      0      0 
    Node 0, zone   Normal   9347  10672   4696   6395   4327   2799   2243   2107   2166     63   1316 
     Develop>

    发现kmalloc-128 异常!

    2、使用kmemleak 看到如下可能的leak 点

    unreferenced object 0xffffffc883a81000 (size 128):
      comm "softirq", pid 0, jiffies 4295163332 (age 144041.356s)
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<ffffffc0001f968c>] __save_stack_trace+0x38/0x48
        [<ffffffc0001f9d40>] create_object+0x13c/0x268
        [<ffffffc000868d54>] kmemleak_alloc+0x88/0xbc
        [<ffffffc0001e4cf0>] kmem_cache_alloc_trace+0x148/0x224
        [<ffffffc0003810ac>] lsm_sock_alloc+0x34/0x60
        [<ffffffc000384b18>] security_sk_alloc+0x34/0x88
        [<ffffffc00071155c>] sk_prot_alloc+0xbc/0x11c
        [<ffffffc00071452c>] sk_clone_lock+0x38/0x2dc
        [<ffffffc000793614>] inet_csk_clone_lock+0x30/0xdc
        [<ffffffc0007abef4>] tcp_create_openreq_child+0x38/0x370
        [<ffffffc0008256c4>] tcp_v6_syn_recv_sock+0x1c0/0x57c
        [<ffffffc0007ac9d8>] tcp_check_req+0x2d8/0x3c4
        [<ffffffc000826410>] tcp_v6_rcv+0x390/0xb3c
        [<ffffffc0007fefac>] ip6_input_finish+0x2c0/0x438
        [<ffffffc0007ff5fc>] ip6_input+0x44/0xa0
        [<ffffffc0007fecd4>] ip6_rcv_finish+0x94/0xac
    unreferenced object 0xffffffc878e1b0c0 (size 408):
      comm "softirq", pid 0, jiffies 4295163332 (age 144041.380s)
      hex dump (first 32 bytes):
        40 8b c3 7a c8 ff ff ff f3 14 c9 66 60 4d 50 00  @..z.......f`MP.
        0a 00 0c fe 00 00 00 00 60 68 62 7a c0 ff ff ff  ........`hbz....
      backtrace:
        [<ffffffc0001f968c>] __save_stack_trace+0x38/0x48
        [<ffffffc0001f9d40>] create_object+0x13c/0x268
        [<ffffffc000868d54>] kmemleak_alloc+0x88/0xbc
        [<ffffffc0001e4ac4>] kmem_cache_alloc+0x144/0x228
        [<ffffffc00079a2b8>] inet_reqsk_alloc+0x34/0xb0
        [<ffffffc00079afac>] tcp_conn_request+0x17c/0x8b4
        [<ffffffc0008250f4>] tcp_v6_conn_request+0x68/0x98
        [<ffffffc0007a0ca4>] tcp_rcv_state_process+0x88/0xac0
        [<ffffffc000825e64>] tcp_v6_do_rcv+0x204/0x420
        [<ffffffc000826684>] tcp_v6_rcv+0x604/0xb3c
        [<ffffffc0007fefac>] ip6_input_finish+0x2c0/0x438
        [<ffffffc0007ff5fc>] ip6_input+0x44/0xa0
        [<ffffffc0007fecd4>] ip6_rcv_finish+0x94/0xac
        [<ffffffc0007ff51c>] ipv6_rcv+0x3f8/0x494
        [<ffffffc000728e18>] __netif_receive_skb_core+0x6dc/0x95c
        [<ffffffc00072982c>] __netif_receive_skb+0x34/0x90

     使用 kprobe 统计  sk的refcnt 引用计数,最后发现是 在查找sk的时候  会inc refcnt 但是由没有设置 skb->sk=sk ;报文走正常协议栈时 会再次查找sk 导致 refcnt 引用计数增加了一次

    http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子
  • 相关阅读:
    Linux crontab 命令
    tcpdump抓包工具
    tcpdump过滤某个端口
    ARM处理器基础Cortex-M4
    rtems floating poing switch
    ARM处理器的堆栈和函数调用,以及与Sparc的比较
    关于调用堆栈,任务堆栈
    如何测试嵌入式处理器的CPU使用率
    关于嵌入式实时操作系统的实时性
    RTEMS API
  • 原文地址:https://www.cnblogs.com/codestack/p/14714114.html
Copyright © 2020-2023  润新知