除了用户空间、缓存和slab 之外,Linux 还把内存用在什么地方?

除了用户空间、缓存和slab 之外,Linux 还把内存用在什么地方?

我的系统具有 1 GB 物理 RAM。现在,free显示以下内存使用情况:

             total       used       free     shared    buffers     cached
Mem:       1026360     863660     162700          0          0      50216
-/+ buffers/cache:     813444     212916
Swap:      5242876     500648    4742228

因此,除了块缓存之外,还使用了 813 MB。/proc/meminfo(由于长度原因,我将在底部发布)告诉我,其中 283 MB 被映射到用户态进程 ( AnonPages+ Mapped),而 127 MB 被内核使用 ( Slab+ KernelStack+ PageTables)。

然而,仍有约 400 MB 的空间下落不明。我对系统如何使用内存的概念是否正确?有没有办法知道我的一半内存用于什么用途?

MemTotal:        1026360 kB
MemFree:          193768 kB
Buffers:               0 kB
Cached:            28932 kB
SwapCached:       101208 kB
Active:           178816 kB
Inactive:         182476 kB
Active(anon):     167196 kB
Inactive(anon):   168184 kB
Active(file):      11620 kB
Inactive(file):    14292 kB
Unevictable:        9848 kB
Mlocked:            9848 kB
SwapTotal:       5242876 kB
SwapFree:        4739272 kB
Dirty:                24 kB
Writeback:             0 kB
AnonPages:        268280 kB
Mapped:            14832 kB
Shmem:               280 kB
Slab:             111828 kB
SReclaimable:      27432 kB
SUnreclaim:        84396 kB
KernelStack:        2280 kB
PageTables:        13200 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     5756056 kB
Committed_AS:    1506036 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      145004 kB
VmallocChunk:   34359581976 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       79808 kB
DirectMap2M:      968704 kB

答案1

我使用一点 awk 根据驻留集大小 (RSS) 获取前 10 个内存用户,该驻留集大小是进程在服务器 RAM 中实际使用的内存量(没有交换页面):

awk '{ printf "%8d %8d %8d pid:%-5d comm:%-10s state:%c\n",$14,$15,$24,$1,$2,$3; }' /proc/[1-9]*/stat |sort -rn -k3 |sed 10q

如果没有,sed 10q您将获得按降序排列的完整进程列表。

RSS 是输出中的第三列。可能您需要根据 . 修复内核的字段编号man 5 proc

相关内容