什么是使用内存?

什么是使用内存?

根据htopfree,我正在查看的机器目前的 RAM 为 6631 / 11907 MB。这大约是可用 RAM 的一半。然而,当我按 MEM% 排序时tophtop使用最多的内存是 Xorg,其 MEM 为 0.8%。 gnome-settings使用 0.3%,其他几个使用 0.1%。这些百分比加起来不到 50%。

我如何找出什么正在使用约 50% 的内存,以及为什么我在 top/htop 中看不到此内存使用情况?

的输出free -mt

             total       used       free     shared    buffers     cached
Mem:         11907      10660       1246          0        650       3379
-/+ buffers/cache:       6629       5277
Swap:         3999         26       3973
Total:       15907      10686       5220

编辑: 按照要求...

虚拟机统计 1 5

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0  26640 312180 695976 4229988    0    0     4    34    0    1  1  1 96  2  0   
 0  0  26640 312032 695976 4230016    0    0     0     0  157  191  0  0 100  0  0  
 0  0  26640 312156 695976 4230016    0    0     0     0  158  270  0  0 100  0  0  
 0  0  26640 312156 695976 4230016    0    0     0     0  128  189  0  0 100  0  0  
 0  0  26640 312156 695976 4230016    0    0     0     0  212  308  0  0 100  0  0  

猫 /proc/meminfo

MemTotal:       12192876 kB
MemFree:          311644 kB
Buffers:          695984 kB
Cached:          4230016 kB
SwapCached:         7684 kB
Active:          1378792 kB
Inactive:        3656424 kB
Active(anon):       2192 kB
Inactive(anon):   108500 kB
Active(file):    1376600 kB
Inactive(file):  3547924 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       4095992 kB
SwapFree:        4069352 kB
Dirty:                28 kB
Writeback:             0 kB
AnonPages:        102412 kB
Mapped:            52116 kB
Shmem:              1456 kB
Slab:            5584084 kB
SReclaimable:    4402760 kB
SUnreclaim:      1181324 kB
KernelStack:        3176 kB
PageTables:        17852 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    10192428 kB
Committed_AS:     678004 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      185496 kB
VmallocChunk:   34359540220 kB
HardwareCorrupted:     0 kB
AnonHugePages:     28672 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:     5177316 kB
DirectMap2M:     7403520 kB
DirectMap1G:           0 kB

答案1

该问题可能是由于共享内存引起的,许多实用程序并未考虑共享内存,因为它在多个进程之间共享。您可以使用该smemstat实用程序进行检查(“报告共享内存按比例划分的内存使用情况”)。

编辑:内核也可以占用内存的很大一部分(包含在输出used值中free)。看看 的内容/proc/meminfo。根据追踪 Linux 中“丢失”的内存使用情况,Slab + Shmem + KernelStack + PageTables给出了内核空间。一般来说,Slab似乎相当重要。

其他用户也有类似的问题:

答案2

对于这种差异有两种可能的解释:

  • 你在虚拟机上,并且有共享内存。
  • 你有很多,许多进程消耗很少量的内存,但聚合后,它们消耗更多的内存。

第一个很容易确定,第二个......同样,但需要注意的是,您需要找到几个正在使用 RAM 的进程。 ps、uniq 和 sort 可以帮助你:

➜  ~  ps axco command | uniq -c | sort -nr | head
      2 xdg-open <defunct>
      2 mplayer
      1 zsh
      1 zsh
      1 zsh
      1 x-session-manag
      1 xprop
      1 Xorg
      1 writeback
      1 watchdog/0

通过这个,您可以查看是否有恶意进程调用自身并使用您的内存。

答案3

你已经通过免费命令得到了答案,所以,

free -m
-/+ buffers/cache:       6629       5277

这是您需要的行,因此这些值是实际使用的内存,因此您有 5277 的实际可用内存,这就是您看不到它的top方式htop

免费的第一个字段:

             total       used       free     shared    buffers     cached
Mem:         11907      10660       1246          0        650       3379

这显示了操作系统(内核)实际保留的内存,并且在没有缓冲区的情况下并未真正使用,您可以查阅vmstat更多信息和mdb -k模块来检查内核使用的内存并使用命令中的值计算它free

正如我已经指出的那样,您的内存由内核保留(缓存),并且它会一直保留在那里,直到某些应用程序请求它为止。这就是为什么你看不到哪个进程使用它。

请给出输出cat /proc/meminfo并给我们缓存字段,这实际上是内核使用的内容!

答案4

您有 1246 MB 的完全可用内存,但您看到的 5277 MB 没有“缓存”内存。这意味着操作系统已将一些内容放入您的内存中以加快速度。它称之为“已使用”(因此您的“免费”号码仅为 1246),但如果您需要,它实际上可供您使用。

看这个答案:`free`:输出格式

相关内容