我正在使用内核 5.10.24 的嵌入式 Linux 系统。系统内有96MB DRAM。
系统启动时,我检查了内存使用情况并得到以下信息。
# dmesg | grep "kernel code"
[ 0.000000] Memory: 85888K/131072K available (7885K kernel code, 692K rwdata, 1284K rodata, 560K init, 336K bss, 45184K reserved, 0K cma-reserved)
# free -m
total used free shared buff/cache available
Mem: 84 56 1 0 26 25
Swap: 0 0 0
#
#
# cat /proc/meminfo
MemTotal: 86448 kB
MemFree: 1992 kB
MemAvailable: 25948 kB
Buffers: 0 kB
Cached: 26896 kB
SwapCached: 0 kB
Active: 9632 kB
Inactive: 39064 kB
Active(anon): 72 kB
Inactive(anon): 21796 kB
Active(file): 9560 kB
Inactive(file): 17268 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 21852 kB
Mapped: 7664 kB
Shmem: 68 kB
KReclaimable: 696 kB
Slab: 8632 kB
SReclaimable: 696 kB
SUnreclaim: 7936 kB
KernelStack: 608 kB
PageTables: 400 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 43224 kB
Committed_AS: 146992 kB
VmallocTotal: 1048372 kB
VmallocUsed: 4156 kB
VmallocChunk: 0 kB
Percpu: 200 kB
从free -m
输出中,我知道有 25MB 内存可用。
我可以算出用户空间的内存使用情况,但是如何知道内核空间使用了多少内存呢?
我阅读了一些博客和 SO,发现Buffers
和Slab
in/proc/meminfo
是内核使用的内存。
加起来,还是有区别的!
那么如何找出内核空间使用的内存呢?是否Buffers
足以检查内核空间中的内存使用情况Slab
?/proc/meminfo
内核内存使用不仅限于 Buffers 和 Slab。它还包括其他组件,如内核代码、内核数据和内核堆栈。
您可以使用以下组件计算内核内存使用情况:
现在,将它们加起来:
因此,内核使用了大约 19,997 KB 或大约 19.5 MB 的内存。请记住,这是一个近似值,可能无法解释内核使用的每个内存字节。随着内核动态分配和释放内存,内存使用情况也可能在运行时发生变化。