Linux 中检查内存使用情况不匹配

Linux 中检查内存使用情况不匹配

我正在开发一个嵌入式 Linux 系统(kernel-5.10-24),系统中有 64MB RAM。

现在我正在检查系统中的内存使用情况,我发现不匹配的数据。

首先,内核代码和数据的内存使用情况,

Memory: 53424K/65536K available (7878K kernel code, 690K rwdata, 1744K rodata, 364K init, 337K bss, 12112K reserved, 0K cma-reserved)

系统可用内存大小为53424KB

的输出free -k如下,

/ # free -k
              total        used        free      shared  buff/cache   available
Mem:          53788       39148       13704           0         936       12960
Swap:             0           0           0

的输出cat /proc/meminfo如下,

/ # cat /proc/meminfo
MemTotal:          53788 kB
MemFree:           13692 kB
MemAvailable:      12948 kB
Buffers:               0 kB
Cached:              900 kB
SwapCached:            0 kB
Active:              832 kB
Inactive:            240 kB
Active(anon):          4 kB
Inactive(anon):      172 kB
Active(file):        828 kB
Inactive(file):       68 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:           192 kB
Mapped:              848 kB
Shmem:                 0 kB
KReclaimable:        372 kB
Slab:               6320 kB
SReclaimable:        372 kB
SUnreclaim:         5948 kB
KernelStack:         360 kB
PageTables:           40 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       26892 kB
Committed_AS:        532 kB
VmallocTotal:    1048372 kB
VmallocUsed:        2240 kB
VmallocChunk:          0 kB
Percpu:              200 kB

内核内存使用量是“Buffers+Slab+KernelStack+PageTables”= 的总和7620K

运行时$(ps -o pid,comm,rss,vsz | awk '{print $3}' | grep -v RSS),各进程的RSS总和约为4120K

所以系统启动后,内核空间和用户空间的内存使用量之和为7620 + 4120 = 11740K

free -k显示used内存约为39148K,这是一个很大的不匹配。

为什么会存在很大的不匹配,以及如何精确计算 Linux 中内核和用户空间的内存使用情况?

相关内容