根据htop
和free
,我正在查看的机器目前的 RAM 为 6631 / 11907 MB。这大约是可用 RAM 的一半。然而,当我按 MEM% 排序时top
,htop
使用最多的内存是 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似乎相当重要。
其他用户也有类似的问题:
- RAM 使用量没有增加? (免费+已用<总计)(由于与 NFS 相关的错误)
- 报告的已用内存与应用程序内存使用总和之间的差异
答案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`:输出格式