linux内存泄露定位过程(kmemleak和slab debug)

devtools/2025/1/15 22:11:52/

1,当遇到内存增加过多时,或者由于内存导致系统oom时我们怎么定位呢,定位时需要确认是内核态还是用户态内存泄露。

排查步骤

top查看VIRT和RES内存

root@ubuntu2004:~# top
top - 21:05:39 up 7 min,  1 user,  load average: 5.01, 4.09, 2.08
Tasks: 189 total,   1 running, 188 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.4 sy,  0.0 ni, 99.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1957.0 total,   1127.2 free,    420.2 used,    409.6 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1507.5 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    624 root      20   0  572632 130848  88464 S   0.0   6.5   0:05.54 Xorg
    840 rpdzkj    20   0 1023136  78336  56980 S   0.0   3.9   0:02.72 xfwm4
    966 rpdzkj    20   0  680868  66272  52292 S   0.0   3.3   0:01.06 evoluti+
    714 rpdzkj    20   0  378496  57528  43640 S   0.0   2.9   0:01.55 xfce4-s+
    957 rpdzkj    20   0  296700  55016  29824 S   0.0   2.7   0:07.41 onboard
   1037 rpdzkj    20   0  360260  47704  28668 S   0.0   2.4   0:02.58 blueman+
    964 rpdzkj    20   0  431776  44016  26368 S   0.0   2.2   0:03.17 blueman+
    941 rpdzkj    20   0  498700  36672  29316 S   0.0   1.8   0:02.71 panel-8+
    967 rpdzkj    20   0  276012  35068  20404 S   0.0   1.7   0:01.51 udiskie
    954 rpdzkj    20   0  425520  34976  27232 S   0.0   1.7   0:18.35 nm-appl+
    942 rpdzkj    20   0  231988  34744  27904 S   0.0   1.7   0:00.51 panel-1+
    937 rpdzkj    20   0  273236  34304  23384 S   0.0   1.7   0:01.37 xfdeskt+
    909 rpdzkj    20   0  268888  30152  23612 S   0.0   1.5   0:00.91 xfce4-p+
    989 rpdzkj    20   0  268392  28776  22956 S   0.0   1.4   0:00.69 xfce4-n+
   1029 rpdzkj    20   0  837080  27936  24056 S   0.0   1.4   0:00.59 evoluti+
   1064 rpdzkj    20   0  672056  27340  23704 S   0.0   1.4   0:00.33 evoluti+
    943 rpdzkj    20   0  190136  24608  19268 S   0.0   1.2   0:00.40 panel-1+

shirft+M 可以排序查看内存的排序。

2,ps -aux

root@ubuntu2004:~# ps -aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  1.3  0.4 169072  9708 ?        Ss   20:57   0:12 /sbin/init
root           2  0.0  0.0      0     0 ?        S    20:57   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   20:57   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   20:57   0:00 [rcu_par_gp]
root           5  0.1  0.0      0     0 ?        I    20:57   0:01 [kworker/0:0-
root           8  0.0  0.0      0     0 ?        I<   20:57   0:00 [mm_percpu_wq
root           9  0.0  0.0      0     0 ?        S    20:57   0:00 [rcu_tasks_ru
root          10  0.0  0.0      0     0 ?        S    20:57   0:00 [rcu_tasks_tr
root          11  0.0  0.0      0     0 ?        S    20:57   0:00 [ksoftirqd/0]
root          12  0.1  0.0      0     0 ?        I    20:57   0:00 [rcu_sched]
root          13  0.0  0.0      0     0 ?        S    20:57   0:00 [migration/0]
root          14  0.0  0.0      0     0 ?        S    20:57   0:00 [cpuhp/0]
root          15  0.0  0.0      0     0 ?        S    20:57   0:00 [cpuhp/1]
root          16  0.0  0.0      0     0 ?        S    20:57   0:00 [migration/1]
root          17  0.0  0.0      0     0 ?        S    20:57   0:00 [ksoftirqd/1]
root          19  0.0  0.0      0     0 ?        I<   20:57   0:00 [kworker/1:0H
root          20  0.0  0.0      0     0 ?        S    20:57   0:00 [cpuhp/2]
root          21  0.0  0.0      0     0 ?        S    20:57   0:00 [migration/2]
root          22  0.0  0.0      0     0 ?        S    20:57   0:00 [ksoftirqd/2]
root          25  0.0  0.0      0     0 ?        S    20:57   0:00 [cpuhp/3]
root          26  0.0  0.0      0     0 ?        S    20:57   0:00 [migration/3]
root          27  0.0  0.0      0     0 ?        S    20:57   0:00 [ksoftirqd/3]
root          30  0.0  0.0      0     0 ?        S    20:57   0:00 [kdevtmpfs]
root          31  0.0  0.0      0     0 ?        I<   20:57   0:00 [netns]
root          36  0.0  0.0      0     0 ?        S    20:57   0:00 [kauditd]
root          37  0.0  0.0      0     0 ?        S    20:57   0:00 [oom_reaper]
root          38  0.0  0.0      0     0 ?        I<   20:57   0:00 [writeback]
root          83  0.0  0.0      0     0 ?        I<   20:57   0:00 [kblockd]
root          84  0.0  0.0      0     0 ?        I<   20:57   0:00 [blkcg_punt_b
root          85  0.0  0.0      0     0 ?        D    20:58   0:00 [kconsole]
root          86  0.0  0.0      0     0 ?        I<   20:58   0:00 [tpm_dev_wq]
root          87  0.0  0.0      0     0 ?        I<   20:58   0:00 [edac-poller]
root          88  0.0  0.0      0     0 ?        I<   20:58   0:00 [devfreq_wq]
root          89  0.0  0.0      0     0 ?        S    20:58   0:00 [watchdogd]
root          90  0.0  0.0      0     0 ?        I    20:58   0:00 [kworker/u8:1
root          92  0.0  0.0      0     0 ?        I<   20:58   0:00 [rpciod]
root          93  0.0  0.0      0     0 ?        I<   20:58   0:00 [kworker/u9:0
root          94  0.0  0.0      0     0 ?        I<   20:58   0:00 [xprtiod]
root          95  0.0  0.0      0     0 ?        I<   20:58   0:00 [cfg80211]
root          96  0.0  0.0      0     0 ?        S    20:58   0:00 [irq/75-rockc
root         116  0.0  0.0      0     0 ?        S    20:58   0:00 [kswapd0]
root         117  0.0  0.0      0     0 ?        I<   20:58   0:00 [nfsiod]
root         118  0.0  0.0      0     0 ?        I<   20:58   0:00 [xfsalloc]
root         119  0.0  0.0      0     0 ?        I<   20:58   0:00 [xfs_mru_cach
root         121  0.0  0.0      0     0 ?        I<   20:58   0:00 [kthrotld]
root         122  0.0  0.0      0     0 ?        S    20:58   0:00 [irq/77-rockc
root         124  0.0  0.0      0     0 ?        I    20:58   0:00 [kworker/3:3-
root         125  0.0  0.0      0     0 ?        S    20:58   0:00 [irq/78-rockc
root         126  0.0  0.0      0     0 ?        S    20:58   0:00 [queue_work0]
root         127  0.0  0.0      0     0 ?        S    20:58   0:00 [queue_work1]
root         128  0.0  0.0      0     0 ?        S    20:58   0:00 [queue_work2]
root         129  0.0  0.0      0     0 ?        S    20:58   0:00 [queue_work3]
root         130  0.0  0.0      0     0 ?        S    20:58   0:00 [queue_work4]
root         131  0.0  0.0      0     0 ?        S    20:58   0:00 [queue_work5]
root         132  0.0  0.0      0     0 ?        S    20:58   0:00 [irq/30-fdea0
root         133  0.0  0.0      0     0 ?        S    20:58   0:00 [irq/35-fdee0
root         134  0.0  0.0      0     0 ?        S    20:58   0:00 [irq/37-fdef0
root         135  0.0  0.0      0     0 ?        S    20:58   0:00 [irq/33-fded0
root         136  0.0  0.0      0     0 ?        S    20:58   0:00 [hwrng]
root         137  0.0  0.0      0     0 ?        I<   20:58   0:00 [hpd_queue]

查看  VSZ  和RSS  的变化。

3.smem 

后面补充

4,cat /proc/pid/status

root@ubuntu2004:~# cat /proc/624/status
Name:   Xorg
Umask:  0022
State:  S (sleeping)
Tgid:   624
Ngid:   0
Pid:    624
PPid:   616
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 128
Groups:
NStgid: 624
NSpid:  624
NSpgid: 624
NSsid:  624
VmPeak:   598904 kB
VmSize:   572632 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:    138316 kB
VmRSS:    130848 kB
RssAnon:           42384 kB
RssFile:           87460 kB
RssShmem:           1004 kB
VmData:   107784 kB
VmStk:       132 kB
VmExe:      2368 kB
VmLib:    158448 kB
VmPTE:       512 kB
VmSwap:        0 kB
HugetlbPages:          0 kB
CoreDumping:    0
THP_enabled:    0
Threads:        9
SigQ:   1/7734
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000301000
SigCgt: 00000001c18066ef
CapInh: 0000000000000000
CapPrm: 000001ffffffffff
CapEff: 000001ffffffffff
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
NoNewPrivs:     0
Seccomp:        0
Seccomp_filters:        0
Speculation_Store_Bypass:       not vulnerable
Cpus_allowed:   f
Cpus_allowed_list:      0-3
Mems_allowed:   1
Mems_allowed_list:      0
voluntary_ctxt_switches:        9753
nonvoluntary_ctxt_switches:     2738

VmSize表示的是VSS,VmRSS表示的是RSS; 

查看所有进程的累加

root@ubuntu2004:~# cat /proc/624/smaps | grep 'Rss' | awk '{Total+=$2} END {print Total"KB"}'
107248KB
root@ubuntu2004:~# cat /proc/624/smaps | grep 'Pss' | awk '{Total+=$2} END {print Total"KB"}'
77434KB 

 查看vss和res物理内存有没有增加,如果有明显增加可以确定是用户态的内存泄漏,可以使用valgrind来定位问题。

如果用户态内存没看到有明显增加,就需要考虑是不是内核态的泄露了。

首先通过cat proc/meminfo来查看unReclamiable slab memory有没有明显变化。

root@ubuntu2004:~# cat /proc/meminfo
MemTotal:        2003988 kB
MemFree:         1155916 kB
MemAvailable:    1544148 kB
Buffers:           18900 kB
Cached:           362320 kB
SwapCached:            0 kB
Active:            76116 kB
Inactive:         612384 kB
Active(anon):        732 kB
Inactive(anon):   311648 kB
Active(file):      75384 kB
Inactive(file):   300736 kB
Unevictable:        3784 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               208 kB
Writeback:             0 kB
AnonPages:        311072 kB
Mapped:           180516 kB
Shmem:              5096 kB
KReclaimable:      37040 kB
Slab:              83124 kB
SReclaimable:      37040 kB
SUnreclaim:        46084 kB
KernelStack:        5424 kB
PageTables:         7728 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1001992 kB
Committed_AS:    1742756 kB
VmallocTotal:   263061440 kB
VmallocUsed:       16196 kB
VmallocChunk:          0 kB
Percpu:             1632 kB
CmaTotal:          16384 kB
CmaAllocated:       2064 kB
CmaReleased:       14320 kB
CmaFree:            2124 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB

查看SReclaimable的内存变化情况。 

首先通过cat proc/slabinfo来查看kmalloc的内存没有明显变化,如果有的话就可以确认是内核态的泄露。 

root@ubuntu2004:~# 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     56     56    144   28    1 : tunables    0    0    0 : slabdata      2      2      0
btrfs_delayed_tree_ref      0      0    104   39    1 : tunables    0    0    0 : slabdata      0      0      0
btrfs_delayed_node      0      0    312   26    2 : tunables    0    0    0 : slabdata      0      0      0
btrfs_ordered_extent      0      0    408   20    2 : tunables    0    0    0 : slabdata      0      0      0
btrfs_extent_map       0      0    144   28    1 : tunables    0    0    0 : slabdata      0      0      0
bio-3                 21     21    384   21    2 : tunables    0    0    0 : slabdata      1      1      0
btrfs_path             0      0    112   36    1 : tunables    0    0    0 : slabdata      0      0      0
btrfs_inode            0      0   1152   28    8 : tunables    0    0    0 : slabdata      0      0      0
ubifs_inode_slab       0      0    760   21    4 : tunables    0    0    0 : slabdata      0      0      0
PINGv6                 0      0   1216   26    8 : tunables    0    0    0 : slabdata      0      0      0
RAWv6                 78     78   1216   26    8 : tunables    0    0    0 : slabdata      3      3      0
UDPv6                 72     72   1344   24    8 : tunables    0    0    0 : slabdata      3      3      0
tw_sock_TCPv6          0      0    240   17    1 : tunables    0    0    0 : slabdata      0      0      0
request_sock_TCPv6      0      0    304   26    2 : tunables    0    0    0 : slabdata      0      0      0
TCPv6                 26     26   2368   13    8 : tunables    0    0    0 : slabdata      2      2      0
nf_conntrack_expect      0      0    216   18    1 : tunables    0    0    0 : slabdata      0      0      0
nf_conntrack           0      0    256   16    1 : 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
lkdtm-heap-b           0      0     72   56    1 : tunables    0    0    0 : slabdata      0      0      0
lkdtm-heap-a           0      0     72   56    1 : tunables    0    0    0 : slabdata      0      0      0
lkdtm-heap-double_free      0      0     72   56    1 : tunables    0    0    0 : slabdata      0      0      0
lkdtm-usercopy         0      0   1024   16    4 : tunables    0    0    0 : slabdata      0      0      0
mqueue_inode_cache     17     17    960   17    4 : tunables    0    0    0 : slabdata      1      1      0
xfs_buf                0      0    384   21    2 : tunables    0    0    0 : slabdata      0      0      0
xfs_rui_item           0      0    680   24    4 : tunables    0    0    0 : slabdata      0      0      0
xfs_rud_item         240    240    168   24    1 : tunables    0    0    0 : slabdata     10     10      0
xfs_icr                0      0    176   23    1 : tunables    0    0    0 : slabdata      0      0      0
xfs_inode              0      0    960   17    4 : tunables    0    0    0 : slabdata      0      0      0
xfs_efi_item           0      0    424   19    2 : tunables    0    0    0 : slabdata      0      0      0
xfs_efd_item           0      0    432   18    2 : tunables    0    0    0 : slabdata      0      0      0
xfs_buf_item           0      0    264   31    2 : tunables    0    0    0 : slabdata      0      0      0
xfs_da_state           0      0    480   17    2 : tunables    0    0    0 : slabdata      0      0      0
xfs_btree_cur          0      0    224   18    1 : tunables    0    0    0 : slabdata      0      0      0
xfs_log_ticket         0      0    184   22    1 : tunables    0    0    0 : slabdata      0      0      0
ovl_inode              0      0    672   24    4 : tunables    0    0    0 : slabdata      0      0      0
fuse_request           0      0    152   26    1 : tunables    0    0    0 : slabdata      0      0      0
fuse_inode             0      0    832   19    4 : tunables    0    0    0 : slabdata      0      0      0
jffs2_refblock         0      0    240   17    1 : tunables    0    0    0 : slabdata      0      0      0
jffs2_i                0      0    680   24    4 : tunables    0    0    0 : slabdata      0      0      0
ntfs_big_inode_cache      0      0    896   18    4 : tunables    0    0    0 : slabdata      0      0      0
ntfs_inode_cache       0      0    296   27    2 : tunables    0    0    0 : slabdata      0      0      0
nfs_direct_cache       0      0    192   21    1 : tunables    0    0    0 : slabdata      0      0      0
nfs_read_data         34     34    960   17    4 : tunables    0    0    0 : slabdata      2      2      0
nfs_inode_cache        0      0   1072   30    8 : tunables    0    0    0 : slabdata      0      0      0
isofs_inode_cache      0      0    640   25    4 : tunables    0    0    0 : slabdata      0      0      0
fat_inode_cache        0      0    728   22    4 : tunables    0    0    0 : slabdata      0      0      0
fat_cache              0      0     40  102    1 : tunables    0    0    0 : slabdata      0      0      0
squashfs_inode_cache      0      0    704   23    4 : tunables    0    0    0 : slabdata      0      0      0
jbd2_transaction_s     64     64    256   16    1 : tunables    0    0    0 : slabdata      4      4      0
jbd2_journal_head    612    612    120   34    1 : tunables    0    0    0 : slabdata     18     18      0
jbd2_revoke_table_s    256    256     16  256    1 : tunables    0    0    0 : slabdata      1      1      0
ext4_fc_dentry_update      0      0     80   51    1 : tunables    0    0    0 : slabdata      0      0      0
ext4_inode_cache    4592   4592   1136   28    8 : tunables    0    0    0 : slabdata    164    164      0
ext4_allocation_context    128    128    128   32    1 : tunables    0    0    0 : slabdata      4      4      0
ext4_system_zone     102    102     40  102    1 : tunables    0    0    0 : slabdata      1      1      0
ext4_io_end          256    256     64   64    1 : tunables    0    0    0 : slabdata      4      4      0
ext4_pending_reservation    512    512     32  128    1 : tunables    0    0    0 : slabdata      4      4      0
ext4_extent_status   3876   3876     40  102    1 : tunables    0    0    0 : slabdata     38     38      0
mbcache              292    292     56   73    1 : tunables    0    0    0 : slabdata      4      4      0
kioctx                 0      0    576   28    4 : tunables    0    0    0 : slabdata      0      0      0
dio                    0      0    640   25    4 : tunables    0    0    0 : slabdata      0      0      0
pid_namespace          0      0    136   30    1 : tunables    0    0    0 : slabdata      0      0      0
rpc_inode_cache        0      0    640   25    4 : tunables    0    0    0 : slabdata      0      0      0
ip4-frags              0      0    200   20    1 : tunables    0    0    0 : slabdata      0      0      0
xfrm_state            21     21    768   21    4 : tunables    0    0    0 : slabdata      1      1      0
ip_dst_cache          84     84    192   21    1 : tunables    0    0    0 : slabdata      4      4      0
RAW                   48     48   1024   16    4 : tunables    0    0    0 : slabdata      3      3      0
UDP                  112    112   1152   28    8 : tunables    0    0    0 : slabdata      4      4      0
tw_sock_TCP            0      0    240   17    1 : tunables    0    0    0 : slabdata      0      0      0
request_sock_TCP       0      0    304   26    2 : tunables    0    0    0 : slabdata      0      0      0
TCP                   42     42   2240   14    8 : tunables    0    0    0 : slabdata      3      3      0
hugetlbfs_inode_cache     54     54    600   27    4 : tunables    0    0    0 : slabdata      2      2      0
eventpoll_pwq        392    392     72   56    1 : tunables    0    0    0 : slabdata      7      7      0
inotify_inode_mark    255    255     80   51    1 : tunables    0    0    0 : slabdata      5      5      0
request_queue         17     17   1832   17    8 : tunables    0    0    0 : slabdata      1      1      0
biovec-max           116    168   4096    8    8 : tunables    0    0    0 : slabdata     21     21      0
biovec-128            48     48   2048   16    8 : tunables    0    0    0 : slabdata      3      3      0
biovec-64             64     64   1024   16    4 : tunables    0    0    0 : slabdata      4      4      0
user_namespace         0      0    536   30    4 : tunables    0    0    0 : slabdata      0      0      0
audit_buffer         170    170     24  170    1 : tunables    0    0    0 : slabdata      1      1      0
sock_inode_cache     646    646    832   19    4 : tunables    0    0    0 : slabdata     34     34      0
skbuff_fclone_cache     32     32    512   16    2 : tunables    0    0    0 : slabdata      2      2      0
skbuff_head_cache    512    512    256   16    1 : tunables    0    0    0 : slabdata     32     32      0
file_lock_cache       68     68    232   17    1 : tunables    0    0    0 : slabdata      4      4      0
file_lock_ctx        292    292     56   73    1 : tunables    0    0    0 : slabdata      4      4      0
fsnotify_mark_connector    512    512     32  128    1 : tunables    0    0    0 : slabdata      4      4      0
net_namespace         16     16   4032    8    8 : tunables    0    0    0 : slabdata      2      2      0
proc_dir_entry      1512   1512    192   21    1 : tunables    0    0    0 : slabdata     72     72      0
pde_opener           408    408     40  102    1 : tunables    0    0    0 : slabdata      4      4      0
proc_inode_cache    4029   4224    664   24    4 : tunables    0    0    0 : slabdata    176    176      0
seq_file             136    136    120   34    1 : tunables    0    0    0 : slabdata      4      4      0
sigqueue             204    204     80   51    1 : tunables    0    0    0 : slabdata      4      4      0
bdev_cache            76     76    832   19    4 : tunables    0    0    0 : slabdata      4      4      0
shmem_inode_cache   1541   1541    688   23    4 : tunables    0    0    0 : slabdata     67     67      0
kernfs_node_cache  36064  36064    128   32    1 : tunables    0    0    0 : slabdata   1127   1127      0
mnt_cache            675    675    320   25    2 : tunables    0    0    0 : slabdata     27     27      0
filp                4893   5536    256   16    1 : tunables    0    0    0 : slabdata    346    346      0
inode_cache        28563  28647    592   27    4 : tunables    0    0    0 : slabdata   1061   1061      0
dentry             41089  41244    192   21    1 : tunables    0    0    0 : slabdata   1964   1964      0
names_cache           48     48   4096    8    8 : tunables    0    0    0 : slabdata      6      6      0
iint_cache             0      0    120   34    1 : tunables    0    0    0 : slabdata      0      0      0
buffer_head         6786   6786    104   39    1 : tunables    0    0    0 : slabdata    174    174      0
uts_namespace         36     36    440   18    2 : tunables    0    0    0 : slabdata      2      2      0
nsproxy              224    224     72   56    1 : tunables    0    0    0 : slabdata      4      4      0
mm_struct            136    136    960   17    4 : tunables    0    0    0 : slabdata      8      8      0
files_cache          161    161    704   23    4 : tunables    0    0    0 : slabdata      7      7      0
signal_cache         677    688   1024   16    4 : tunables    0    0    0 : slabdata     43     43      0
sighand_cache        270    270   2112   15    8 : tunables    0    0    0 : slabdata     18     18      0
task_struct          406    432   3584    9    8 : tunables    0    0    0 : slabdata     48     48      0
cred_jar           16465  18039    192   21    1 : tunables    0    0    0 : slabdata    859    859      0
anon_vma_chain     10216  11200     64   64    1 : tunables    0    0    0 : slabdata    175    175      0
anon_vma            6123   6854     88   46    1 : tunables    0    0    0 : slabdata    149    149      0
pid                  768    768    128   32    1 : tunables    0    0    0 : slabdata     24     24      0
trace_event_file    2622   2622     88   46    1 : tunables    0    0    0 : slabdata     57     57      0
ftrace_event_field   5865   5865     48   85    1 : tunables    0    0    0 : slabdata     69     69      0
pool_workqueue       232    336    256   16    1 : tunables    0    0    0 : slabdata     21     21      0
radix_tree_node     4144   4144    584   28    4 : tunables    0    0    0 : slabdata    148    148      0
task_group             0      0    704   23    4 : tunables    0    0    0 : slabdata      0      0      0
vmap_area           2816   2816     64   64    1 : tunables    0    0    0 : slabdata     44     44      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   16    4 : tunables    0    0    0 : slabdata      0      0      0
dma-kmalloc-512        0      0    512   16    2 : tunables    0    0    0 : slabdata      0      0      0
dma-kmalloc-256        0      0    256   16    1 : 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-rcl-8k         0      0   8192    4    8 : tunables    0    0    0 : slabdata      0      0      0
kmalloc-rcl-4k         0      0   4096    8    8 : tunables    0    0    0 : slabdata      0      0      0
kmalloc-rcl-2k         0      0   2048   16    8 : tunables    0    0    0 : slabdata      0      0      0
kmalloc-rcl-1k         0      0   1024   16    4 : tunables    0    0    0 : slabdata      0      0      0
kmalloc-rcl-512        0      0    512   16    2 : tunables    0    0    0 : slabdata      0      0      0
kmalloc-rcl-256        0      0    256   16    1 : tunables    0    0    0 : slabdata      0      0      0
kmalloc-rcl-128     1152   1152    128   32    1 : tunables    0    0    0 : slabdata     36     36      0
kmalloc-8k           108    108   8192    4    8 : tunables    0    0    0 : slabdata     27     27      0
kmalloc-4k          1042   1072   4096    8    8 : tunables    0    0    0 : slabdata    134    134      0
kmalloc-2k          1000   1072   2048   16    8 : tunables    0    0    0 : slabdata     67     67      0
kmalloc-1k          1487   1552   1024   16    4 : tunables    0    0    0 : slabdata     97     97      0
kmalloc-512         1825   1920    512   16    2 : tunables    0    0    0 : slabdata    120    120      0
kmalloc-256         7441   7584    256   16    1 : tunables    0    0    0 : slabdata    474    474      0
kmalloc-128        41035  41984    128   32    1 : tunables    0    0    0 : slabdata   1312   1312      0
kmem_cache_node      224    224    128   32    1 : tunables    0    0    0 : slabdata      7      7      0
kmem_cache           176    176    256   16    1 : tunables    0    0    0 : slabdata     11     11      0
 

查看内存是否增加slab unreclaimable,如果有增加的话需要看kmalloc里面的统计有没有增加,那个增加的多的话就要看一下内核态,主要看<num_objs> <objsize> 这两列信息做一个乘积,看是否有明显增加。

kmemleak的使用

1、CONFIG_HAVE_DEBUG_KMEMLEAK

所有kmemleak相关config的依赖

2、CONFIG_DEBUG_KMEMLEAK

kmemleak功能开关,打开后会建立/sys/kernel/debug/kmemleak接口

3、CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF

此宏打开后,kmemleak默认关闭,可以通过cmdline中通过kmemleak=on打开

4、CONFIG_DEBUG_KMEMLEAK_AUTO_SCAN

支持kmemleak自动扫描,可以设置扫描时间间隔,默认为600秒,关闭则不会自动扫描

5、CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE=16000

编译更改,从menuconfig/defconfig改了后生成.config

使用时挂载不上,或者失败,适当增加CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE

echo scan >/sys/kernel/debug/kmemleak

cat  /sys/kernel/debug/kmemleak

2,小内存时推荐使用slab/slub debug工具

CONFIG_SLUB=y
CONFIG_SLUB_DEBUG=y
CONFIG_SLUB_DEBUG_ON=y
CONFIG_SLUB_STATS=y
#save the stack
CONFIG_STACKDEPOT=y
查看slab debug信息,统计状态等
/sys/kernel/slab/*
调试内存泄漏,踩踏等信息
/sys/kernel/debug/slab/*

如果内存kmalloc=128内存比较多,就查看alloc-traces

 cat /sys/kernel/debug/slab/kmalloc-128/alloc_traces


http://www.ppmy.cn/devtools/150233.html

相关文章

3D机器视觉的类型、应用和未来趋势

3D相机正在推动机器视觉市场的增长。很多制造企业开始转向自动化3D料箱拣选&#xff0c;专注于使用3D视觉和人工智能等先进技术来简化操作并减少开支。 预计3D相机将在未来五年内推动全球机器视觉市场&#xff0c;这得益于移动机器人和机器人拣选的强劲增长。到 2028 年&#…

【机器学习:八、逻辑回归】

逻辑回归&#xff08;Logistic Regression&#xff09; 1. 逻辑回归的引出 在现实世界中&#xff0c;许多问题都涉及到分类任务。例如&#xff1a; 判断一封邮件是否为垃圾邮件&#xff1b;预测某人是否会患某种疾病&#xff1b;确定图片中是否包含某种特定物体。 这些问题…

qt 窗口(window/widget)绘制/渲染顺序 QPainter QPaintDevice Qpainter渲染 失效 无效 原因

qt窗体布局 窗体渲染过程 qt中窗体渲染逻辑顺序为 本窗体->子窗体/控件 递归&#xff0c;也就是说先渲染父窗体再渲染子窗体。其中子窗体按加入时的先后顺序进行渲染。通过下方的函数调用堆栈可以看出窗体都是在widget组件源码的widgetprivate::drawwidget中进行渲染的&am…

21_Spring Boot缓存注解介绍

前面我们通过使用@EnableCaching、@Cacheable注解实现了Spring Boot默认的基于注解的缓存管理,除此之外,还有更多的缓存注解以及注解属性可以配置优化缓存管理。下面我们针对Spring Boot中的缓存注解及相关属性进行详细讲解。 1.@EnableCaching注解 @EnableCaching是由Spri…

golang单元测试

单元测试 类型前缀签名用途测试函数Testfunc TestXxx(t *testing.T)功能测试、验证逻辑正确性基准函数Benchmarkfunc BenchmarkXxx(b *testing.B)性能测试、效率评估示例函数Examplefunc ExampleXxx()用法展示、生成文档 testing框架 文件名以_test.go结尾&#xff0c;放在与…

Go语言中http.Transport的Keep-Alive配置与性能优化方法

在Go语言中&#xff0c;http.Transport是一个用于发送HTTP或HTTPS请求的客户端工具&#xff0c;它提供了许多可配置的参数以优化性能。其中&#xff0c;Keep-Alive配置是性能优化的关键部分。以下是对http.Transport的Keep-Alive配置与性能优化方法的详细解释&#xff1a; 一、…

12 USART串口通讯

1 串口物理层 两个设备的“DB9接口”之间通过串口信号建立连接&#xff0c;串口信号线中使用“RS232标准”传输数据信号。由于RS232电平标准的信号不能直接被控制器直接识别&#xff0c;所以这些信号会经过“电平转换芯片”转换成控制器能识别的“TTL校准”的电平信号&#xff…

基于R语言的DICE模型实践技术应用;评估气候变化对经济的影响以及不同减排政策的经济成本和效益

DICE模型是一个动态综合气候经济模型&#xff0c;由诺贝尔经济学奖得主William Nordhaus开发&#xff0c;用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例&#xff0c;结合R语言代码进行讲解。 实际…